聊天機械人總結

2021-08-07 21:04:58 字數 1477 閱讀 6089

本文參考:

自己動手做聊天機械人

情感分析**解析

jieba分詞

logging日誌模組學習

logging模組學習

python的namedoc屬性

python兩個內建函式locals和globals

join()和os.path.join()函式

python字串前面加u,r,b的含義

codecs模組(與編碼相關)

word2vec對維基百科資料進行處理

tensorflow自帶的seq2seq模型是基於one-hot的詞嵌入,每個詞用乙個數字代替不足以表示詞與詞之間的關係,word2vec通過多維向量來做詞嵌入,能過表示出詞之間的關係,比如:籃球-科比&足球-梅西。基於seq2seq的思想,利用多維詞向量來實現模型,會有更高的準確性和表達效果。

參考《sequence to sequence learning with neural networks》這篇**,核心思想如下:

abc是輸入語句,wxyz是輸入語句,eoc是標識一句話結束,圖中的訓練單元是lstm,lstm的特點是能夠根據輸入的多個字確定後面的多個字。

上面的模型中編碼器和解碼器共用乙個lstm層,也就是共享引數,牛人們把他們分開像下圖中一樣:

其中綠色的是編碼器,黃色的解碼器,橙色的箭頭傳遞的是lstm的記憶資訊,編碼器唯一傳給解碼器的就是這個狀態資訊

我們看到解碼器每一時序的輸入都是前一時序的輸出,從整體上來看就是我通過不同時序輸入「how are u」,模型就能乙個乙個字的輸出「w i am fine」,這裡w是乙個特殊的標識,它既是編碼器最後的輸出,同時也是解碼器的乙個觸發訊號

那麼我們訓練的時候輸入的x,y應該是什麼呢?

x = 「how are u」,y = 」w i am fine」?

這是不行的,因為再解碼器還沒有訓練出靠譜的引數之前,我們無法保證第乙個時序的輸出就是」i「,那麼傳遞給第二個時序的輸入就不一定是」i」,同樣後面時序的輸入也不對,就無法訓練出想要的模型

所以我們應該這樣做:直接把解碼器中每乙個時序的輸入強制改為「w i am fine」,也就是把這部分從我們訓練樣本的輸入x中傳過來,而y依然是**輸出的「w i am fine」,這樣訓練出來的模型就是我們設計的編碼器解碼器模型了

在使用訓練好的模型做**的時候,我們改變處理方式:在解碼時以前一時序的輸出為輸入做**,這樣就能輸出我們希望輸出的「w i am fine」

基於以上的原理,下面開始實踐。

聊天機械人

我你好!小愛同學 小愛你好,很高興認識你!charset utf 8 css document 休息一會 sleep 1 獲取 使用者傳送的 訊息 可選 後端 對於 使用者發過來的 時候 是否 使用 可選 根據 傳送 過來的 訊息 返回 不同的內容 messagelist array 床前明月光,有...

機械人聊天軟體c C 聊天機械人

例項簡介 c 聊天機械人 例項截圖 核心 3181078聊天機械人 原始碼必讀.pdf 聊天機械人 1.ico 聊天機械人 1.ico form1.designer.cs form1.cs form1.resx program.cs properties assemblyinfo.cs resour...

聊天機械人ELIZA

1 在 自然語言理解 這本書的緒論中曾分析了聊天機械人eliza的設計機理,表明這是一種語言變換的技巧,而不是真正的 自然語言理解 午間休息時檢索了一下,找到了乙個它的連線 它並不如書中所舉的例子那樣的 聰明 也許因為這是第乙個聊天機械人,以及它並沒有真正採取 自然語言理解 的技術有關。下面是筆者與...