chương trình chatbot ngây thơ. Không phân tích cú pháp, không thông minh, chỉ là một tệp đào tạo và đầu ra.
Đầu tiên nó tự đào tạo trên văn bản và sau đó sử dụng dữ liệu từ khóa đào tạo đó để tạo phản hồi cho nội dung nhập của người đối thoại. Quá trình đào tạo tạo ra một từ điển trong đó mỗi khóa là một từ và giá trị là danh sách tất cả các từ theo sau từ đó tuần tự ở bất kỳ đâu trong văn bản đào tạo. Nếu một từ tính năng nhiều hơn một lần trong danh sách này sau đó phản ánh và nó có nhiều khả năng được lựa chọn bởi bot, không cần cho công cụ xác suất chỉ cần làm điều đó với một danh sách.
Bot chọn một từ ngẫu nhiên từ đầu vào của bạn và tạo phản hồi bằng cách chọn một từ ngẫu nhiên khác đã được xem là từ kế thừa từ được giữ. Sau đó, nó lặp lại quá trình này bằng cách tìm người kế thừa từ đó và tiếp tục lặp đi lặp lại cho đến khi nó nghĩ rằng nó đủ nói. Nó đạt đến kết luận đó bằng cách dừng lại ở một từ trước dấu chấm câu trong văn bản huấn luyện. Sau đó, nó sẽ trở lại chế độ đầu vào một lần nữa để cho phép bạn phản hồi, v.v.
Điều này không thực tế nhưng tôi xin thách thức bất kỳ ai làm tốt hơn trong 71 dòng mã !! Đây là một thách thức lớn đối với bất kỳ người viết blog giả mạo nào, và tôi chỉ ước tôi có thể mở thách thức cho một đối tượng rộng hơn số lượng khách truy cập nhỏ mà tôi nhận được vào blog này. Để mã một bot luôn được đảm bảo là ngữ pháp chắc chắn phải gần hơn vài trăm dòng, tôi đơn giản hóa rất nhiều bằng cách chỉ nghĩ đến quy tắc đơn giản nhất để máy tính chỉ đâm vào việc nói gì đó.
Câu trả lời của nó khá ấn tượng khi nói ít nhất! Ngoài ra bạn phải đặt những gì bạn nói trong dấu nháy đơn.
tôi đã sử dụng Chiến tranh và Hòa bình cho “corpus” của tôi mà mất một vài giờ cho các hoạt động đào tạo, sử dụng một tập tin ngắn hơn nếu bạn là thiếu kiên nhẫn ...
đây là huấn luyện viên
#lukebot-trainer.py
import pickle
b=open('war&peace.txt')
text=[]
for line in b:
for word in line.split():
text.append (word)
b.close()
textset=list(set(text))
follow={}
for l in range(len(textset)):
working=[]
check=textset[l]
for w in range(len(text)-1):
if check==text[w] and text[w][-1] not in '(),.?!':
working.append(str(text[w+1]))
follow[check]=working
a=open('lexicon-luke','wb')
pickle.dump(follow,a,2)
a.close()
đây là bot
#lukebot.py
import pickle,random
a=open('lexicon-luke','rb')
successorlist=pickle.load(a)
a.close()
def nextword(a):
if a in successorlist:
return random.choice(successorlist[a])
else:
return 'the'
speech=''
while speech!='quit':
speech=raw_input('>')
s=random.choice(speech.split())
response=''
while True:
neword=nextword(s)
response+=' '+neword
s=neword
if neword[-1] in ',?!.':
break
print response
Bạn có xu hướng có cảm giác kỳ lạ khi nói điều gì đó có vẻ hợp lý.
Tôi không hoàn toàn tin rằng các bot trò chuyện hiện tại thậm chí có một thứ như 'trạng thái'. Câu trả lời của họ dường như chỉ phụ thuộc vào câu hỏi cuối cùng bạn hỏi. Chỉ là trùng hợp ngẫu nhiên mà con người sẽ hỏi một loạt các câu hỏi liên quan. –
http://search.cpan.org/search?query=bot&mode=all –
Có các bot có trạng thái, tôi tự làm việc với một chương trình. Đó là một bot phân tích cú pháp dựa vào cơ sở tri thức sử dụng mạng thần kinh. –