-
當前位置:首頁 > 創(chuàng)意學院 > 技術(shù) > 專題列表 > 正文
chatbots翻譯(chatter翻譯)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于chatbots翻譯的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內(nèi)免費在線使用,能給你生成想要的原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
你只需要給出你的關(guān)鍵詞,它就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端,官網(wǎng):https://ai.de1919.com
本文目錄:
一、RNN基本應(yīng)用
與人類理解文字的道理差不多,看書都是一個字一個字,一句話一句話去理解的。語言本身作為一種符號并沒有意義,只不過是人類對其賦予了意義。而這種意義體現(xiàn)在每個字(語義)以及字的順序(語義關(guān)系)上。RNN相當于在通用神經(jīng)網(wǎng)絡(luò)上加入了人的 先驗知識 ,將文本信息按照序列輸入的方式處理。
RNN對序列的基本思路是: 在序列任務(wù)中前面的數(shù)據(jù)會對當前的計算產(chǎn)生影響。 所以前一個cell的激活值會輸入到后一個cell中。這樣就其實就是對序列數(shù)據(jù)的特點做了一定程度的設(shè)計。
但是隨著序列長度變化,激活值不斷堆疊后就會損失一些信息,導致序列前面的信息對后面的影響變?nèi)?。要知道很多時候語言的頭部信息對后面的信息可能有很大的影響。所以目前應(yīng)用較廣泛的是LSTM模型,在RNN基礎(chǔ)結(jié)構(gòu)上增加了一條長記憶線C,每個cell的X與A會使得C對信息進行補充或者丟失,而具有序列重要信息的C會對A的激活值具有影響。就像是模型附帶了一個小本本,遇到新鮮事兒就記進去,然后在后續(xù)判斷將小本本的信息加入,產(chǎn)出更有可信度的激活值。
在RNN應(yīng)用過程中,逐漸發(fā)現(xiàn)有時候當前局部的計算不僅僅與前面的信息相關(guān),也與后面的信息相關(guān)(特別是翻譯、語音識別等)。所以提出了 雙向RNN結(jié)構(gòu) ,將前面的信息與后面的信息綜合起來做判斷。
人在進行信息判斷時,有時候不僅僅是綜合整個序列的信息,有時候更會抓住重點去分析以便快速得到更好的答案,在序列模型中每個輸入本身確實有重點,比如吃與食物相關(guān),在分析吃的字詞時只需將注意力分配到與食物相關(guān)得詞上,其他的并不重要,因此提出了 注意力模型 。
如圖所示,經(jīng)過一個雙向RNN處理過的輸出值y,不同的y分配給不同的權(quán)重最終加和起來作為輸入,那么該輸入附帶的信息就會有偏向,從而模型會有更好的效果。
正如前文所說,所有的模型都不完美,在擬合過程中就會出現(xiàn)信息丟失、梯度消失等現(xiàn)象,長短時記憶、雙向計算、注意力機制都是典型的將人類知識加入模型中,使得模型負擔減少,效果更好。
將語料庫通過RNN模型訓練后,模型就學會了人話的規(guī)律,從而可以在給定條件下判斷下一個字是何字的概率,從而在多個場景有所應(yīng)用:
同樣的方式可以應(yīng)用在音樂上,如果將音樂也當做一種序列去訓練,最終我們也可以獲得某種音樂風格的曲子,從而可以實現(xiàn)在文字上以及在音樂上的另類創(chuàng)作。
將RNN模型對接一個softmax輸出,就可以對句子進行分類,通常用來判斷情感趨向。
除了可以通過分析句子得到情感判斷外,分析詞語也可以。目前詞的使用都是將符號向量映射( Word2Vec 算法)到語義空間上,所以詞向量本身就具有語義含義,通過訓練可以做情感分類。
翻譯目前都是用如圖所示結(jié)構(gòu),包含編碼器與解碼器。相當于將語句A通過RNN編碼后灌入另一個模型去解碼為另一個語句B,類似于卷積對圖片的編碼處理,序列模型在編碼解碼過程中也形成了一個表征語義的矩陣,該矩陣的語義表達與語言工具無關(guān),作為兩個語言之間的橋梁實現(xiàn)翻譯功能。借鑒人類翻譯過程中對前后文重點的讀取,翻譯模型會用到注意力機制以達到更好的模型效果
實際上前一陣子出現(xiàn)過AI換臉這種生成式的任務(wù)在社區(qū)火爆,特別是色情網(wǎng)站。其實這種生成任務(wù)很多時候也會用到這種編碼-解碼樣式的結(jié)構(gòu)
目前人機對話包含應(yīng)用場景:問答型、聊天型、任務(wù)型。
問答型 在很多客服領(lǐng)域應(yīng)用廣泛,解決了頭部高頻問題。這類任務(wù)更多屬于機器學習,對用戶的疑問通過關(guān)鍵字檢測分類至我們預(yù)先設(shè)好的問題分類中。
聊天型機器人 最典型的就是微軟小冰,要保持這種開放性對話需要系統(tǒng)知識,不斷產(chǎn)生新的話題。這類Chatbot的目標是實現(xiàn)《her》中的情感陪伴,但是就目前發(fā)展來講,仍然不夠。
任務(wù)型機器人 目前看起來最具有商業(yè)潛力,市面上的智能音箱基本屬于這類范疇。目標是識別用戶意圖后在封閉的話題區(qū)間內(nèi)進行對話直至滿足用戶需求。
在任務(wù)驅(qū)動型的人機對話中,首先就是獲取人的意圖。意圖的識別屬于自然語言理解,屬于一種分類任務(wù)。很多智能音箱平臺會推出一些技能,這些技能實際上就對應(yīng)意圖所對應(yīng)的領(lǐng)域。通過意圖識別后將業(yè)務(wù)處理邏輯落在這些技能上,技能與技能之間其實已經(jīng)沒有關(guān)聯(lián),這樣的方式減輕了訓練難度,使得機器人在特定任務(wù)上有更好的表現(xiàn)。
在計算機處理人類請求后,不僅要判斷用戶的意圖分類,還要對請求語進行序列標注(實體識別、實體關(guān)系抽取等),分析出該意圖下哪些必要信息已經(jīng)獲得,哪些信息沒有獲得,這些就是填槽的過程。
用戶的請求往往是含糊不清的,多輪對話就是為了獲取在該意圖下所有的必要信息。整個過程需要對話管理的支持,對話管理實際一個決策過程(策略樹),系統(tǒng)在對話過程中不斷根據(jù)當前狀態(tài)決定下一步應(yīng)該采取的最優(yōu)動作(如:提供結(jié)果,詢問特定限制條件,澄清或確認需求…)從而最有效的輔助用戶完成信息或服務(wù)獲取的任務(wù)。對話管理的構(gòu)建更需要人工設(shè)計,但似乎通過強化學習也能得到最佳路徑。
DM對話管理過程中可能需要和用戶交互,就會用到自然語言生成,將系統(tǒng)語義轉(zhuǎn)化為人類語言。這是個有限集,用模板是一種選擇,同樣也可以用語言模型、類似翻譯的編碼解碼模型。
二、如何利用深度學習技術(shù)訓練聊天機器人語言模型
數(shù)據(jù)預(yù)處理
模型能聊的內(nèi)容也取決于選取的語料。如果已經(jīng)具備了原始聊天數(shù)據(jù),可以用SQL通過關(guān)鍵字查詢一些對話,也就是從大庫里選取出一個小庫來訓練。從一些論文上,很多算法都是在數(shù)據(jù)預(yù)處理層面的,比如Mechanism-Aware Neural Machine for Dialogue Response Generation就介紹了,從大庫中抽取小庫,然后再進行融合,訓練出有特色的對話來。
對于英語,需要了解NLTK,NLTK提供了加載語料,語料標準化,語料分類,PoS詞性標注,語意抽取等功能。
另一個功能強大的工具庫是CoreNLP,作為 Stanford開源出來的工具,特色是實體標注,語意抽取,支持多種語言。
下面主要介紹兩個內(nèi)容:
中文分詞
現(xiàn)在有很多中文分詞的SDK,分詞的算法也比較多,也有很多文章對不同SDK的性能做比較。做中文分詞的示例代碼如下。
# coding:utf8
'''
Segmenter with Chinese
'''
import jieba
import langid
def segment_chinese_sentence(sentence):
'''
Return segmented sentence.
'''
seg_list = jieba.cut(sentence, cut_all=False)
seg_sentence = u" ".join(seg_list)
return seg_sentence.strip().encode('utf8')
def process_sentence(sentence):
'''
Only process Chinese Sentence.
'''
if langid.classify(sentence)[0] == 'zh':
return segment_chinese_sentence(sentence)
return sentence
if __name__ == "__main__":
print(process_sentence('飛雪連天射白鹿'))
print(process_sentence('I have a pen.'))
以上使用了langid先判斷語句是否是中文,然后使用jieba進行分詞。
在功能上,jieba分詞支持全切分模式,精確模式和搜索引擎模式。
全切分:輸出所有分詞。
精確:概率上的最佳分詞。
所有引擎模式:對精確切分后的長句再進行分詞。
jieba分詞的實現(xiàn)
主要是分成下面三步:
1、加載字典,在內(nèi)存中建立字典空間。
字典的構(gòu)造是每行一個詞,空格,詞頻,空格,詞性。
上訴書 3 n
上訴人 3 n
上訴期 3 b
上訴狀 4 n
上課 650 v
建立字典空間的是使用python的dict,采用前綴數(shù)組的方式。
使用前綴數(shù)組的原因是樹結(jié)構(gòu)只有一層 - word:freq,效率高,節(jié)省空間。比如單詞"dog", 字典中將這樣存儲:
{
"d": 0,
"do": 0,
"dog": 1 # value為詞頻
}
字典空間的主要用途是對輸入句子建立有向無環(huán)圖,然后根據(jù)算法進行切分。算法的取舍主要是根據(jù)模式 - 全切,精確還是搜索。
2、對輸入的語句分詞,首先是建立一個有向無環(huán)圖。
有向無環(huán)圖, Directed acyclic graph (音 /ˈdæɡ/)。
【圖 3-2】 DAG
DAG對于后面計算最大概率路徑和使用HNN模型識別新詞有直接關(guān)系。
3、按照模式,對有向無環(huán)圖進行遍歷,比如,在精確模式下,便利就是求最大權(quán)重和的路徑,權(quán)重來自于在字典中定義的詞頻。對于沒有出現(xiàn)在詞典中的詞,連續(xù)的單個字符也許會構(gòu)成新詞。然后用HMM模型和Viterbi算法識別新詞。
精確模型切詞:使用動態(tài)規(guī)劃對最大概率路徑進行求解。
最大概率路徑:求route = (w1, w2, w3 ,.., wn),使得Σweight(wi)最大。Wi為該詞的詞頻。
更多的細節(jié)還需要讀一下jieba的源碼。
自定義字典
jieba分詞默認的字典是:1998人民日報的切分語料還有一個msr的切分語料和一些txt小說。開發(fā)者可以自行添加字典,只要符合字典構(gòu)建的格式就行。
jieba分詞同時提供接口添加詞匯。
Word embedding
使用機器學習訓練的語言模型,網(wǎng)絡(luò)算法是使用數(shù)字進行計算,在輸入進行編碼,在輸出進行解碼。word embedding就是編解碼的手段。
【圖 3-3】 word embedding, Ref. #7
word embedding是文本的數(shù)值化表示方法。表示法包括one-hot,bag of words,N-gram,分布式表示,共現(xiàn)矩陣等。
Word2vec
近年來,word2vec被廣泛采用。Word2vec輸入文章或者其他語料,輸出語料中詞匯建設(shè)的詞向量空間。詳細可參考word2vec數(shù)學原理解析。
使用word2vec
安裝完成后,得到word2vec命令行工具。
word2vec -train "data/review.txt"
-output "data/review.model"
-cbow 1
-size 100
-window 8
-negative 25
-hs 0
-sample 1e-4
-threads 20
-binary 1
-iter 15
-train "data/review.txt" 表示在指定的語料庫上訓練模型
-cbow 1 表示用cbow模型,設(shè)成0表示用skip-gram模型
-size 100 詞向量的維度為100
-window 8 訓練窗口的大小為8 即考慮一個單詞的前八個和后八個單詞
-negative 25 -hs 0 是使用negative sample還是HS算法
-sample 1e-4 采用閾值
-threads 20 線程數(shù)
-binary 1 輸出model保存成2進制
-iter 15 迭代次數(shù)
在訓練完成后,就得到一個model,用該model可以查詢每個詞的詞向量,在詞和詞之間求距離,將不同詞放在數(shù)學公式中計算輸出相關(guān)性的詞。比如:
vector("法國") - vector("巴黎) + vector("英國") = vector("倫敦")"
對于訓練不同的語料庫,可以單獨的訓練詞向量模型,可以利用已經(jīng)訓練好的模型。
其它訓練詞向量空間工具推薦:Glove。
Seq2Seq
2014年,Sequence to Sequence Learning with Neural Networks提出了使用深度學習技術(shù),基于RNN和LSTM網(wǎng)絡(luò)訓練翻譯系統(tǒng),取得了突破,這一方法便應(yīng)用在更廣泛的領(lǐng)域,比如問答系統(tǒng),圖像字幕,語音識別,撰寫詩詞等。Seq2Seq完成了【encoder + decoder -> target】的映射,在上面的論文中,清晰的介紹了實現(xiàn)方式。
【圖 3-4】 Seq2Seq, Ref. #1
也有很多文章解讀它的原理。在使用Seq2Seq的過程中,雖然也研究了它的結(jié)構(gòu),但我還不認為能理解和解釋它。下面談兩點感受:
a. RNN保存了語言順序的特點,這和CNN在處理帶有形狀的模型時如出一轍,就是數(shù)學模型的設(shè)計符合物理模型。
【圖 3-5】 RNN, Ref. #6
b. LSTM Cell的復雜度對應(yīng)了自然語言處理的復雜度。
【圖 3-6】 LSTM, Ref. #6
理由是,有人將LSTM Cell嘗試了多種其它方案傳遞狀態(tài),結(jié)果也很好。
【圖 3-7】 GRU, Ref. #6
LSTM的一個替代方案:GRU。只要RNN的Cell足夠復雜,它就能工作的很好。
使用DeepQA2訓練語言模型
準備工作,下載項目:
git clone https://github.com/Samurais/DeepQA2.git
cd DeepQA2
open README.md # 根據(jù)README.md安裝依賴包
DeepQA2將工作分成三個過程:
數(shù)據(jù)預(yù)處理:從語料庫到數(shù)據(jù)字典。
訓練模型:從數(shù)據(jù)字典到語言模型。
提供服務(wù):從語言模型到RESt API。
預(yù)處理
DeepQA2使用Cornell Movie Dialogs Corpus作為demo語料庫。
原始數(shù)據(jù)就是movie_lines.txt 和movie_conversations.txt。這兩個文件的組織形式參考README.txt
deepqa2/dataset/preprocesser.py是將這兩個文件處理成數(shù)據(jù)字典的模塊。
train_max_length_enco就是問題的長度,train_max_length_deco就是答案的長度。在語料庫中,大于該長度的部分會被截斷。
程序運行后,會生成dataset-cornell-20.pkl文件,它加載到python中是一個字典:
word2id存儲了{word: id},其中word是一個單詞,id是int數(shù)字,代表這個單詞的id。
id2word存儲了{id: word}。
trainingSamples存儲了問答的對話對。
比如 [[[1,2,3],[4,5,6]], [[7,8,9], [10, 11, 12]]]
1,2,3 ... 12 都是word id。
[1,2,3] 和 [4,5,6] 構(gòu)成一個問答。 [7,8,9] 和 [10, 11, 12] 構(gòu)成一個問答。
開始訓練
cp config.sample.ini config.ini # modify keys
python deepqa2/train.py
config.ini是配置文件, 根據(jù)config.sample.ini進行修改。訓練的時間由epoch,learning rate, maxlength和對話對的數(shù)量而定。
deepqa2/train.py大約100行,完成數(shù)據(jù)字典加載、初始化tensorflow的session,saver,writer、初始化神經(jīng)元模型、根據(jù)epoch進行迭代,保存模型到磁盤。
session是網(wǎng)絡(luò)圖,由placeholder, variable, cell, layer, output 組成。
saver是保存model的,也可以用來恢復model。model就是實例化variable的session。
writer是查看loss fn或者其他開發(fā)者感興趣的數(shù)據(jù)的收集器。writer的結(jié)果會被saver保存,然后使用tensorboard查看。
Model
Model的構(gòu)建要考慮輸入,狀態(tài),softmax,輸出。
定義損耗函數(shù),使用AdamOptimizer進行迭代。
最后,參考一下訓練的loop部分。
每次訓練,model會被存儲在 save路徑下,文件夾的命名根據(jù)機器的hostname,時間戳生成。
提供服務(wù)
在TensorFlow中,提供了標準的serving模塊 - tensorflow serving。但研究了很久,還專門看了一遍 《C++ Essentials》,還沒有將它搞定,社區(qū)也普遍抱怨tensorflow serving不好學,不好用。訓練結(jié)束后,使用下面的腳本啟動服務(wù),DeepQA2的serve部分還是調(diào)用TensorFlow的python api。
cd DeepQA2/save/deeplearning.cobra.vulcan.20170127.175256/deepqa2/serve
cp db.sample.sqlite3 db.sqlite3
python manage.py runserver 0.0.0.0:8000
測試
POST /api/v1/question HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/json
Authorization: Basic YWRtaW46cGFzc3dvcmQxMjM=
Cache-Control: no-cache
{"message": "good to know"}
response
{
"rc": 0,
"msg": "hello"
}
serve的核心代碼在serve/api/chatbotmanager.py中。
使用腳本
scripts/start_training.sh 啟動訓練
scripts/start_tensorboard.sh 啟動Tensorboard
scripts/start_serving.sh 啟動服務(wù)
對模型的評價
目前代碼具有很高的維護性,這也是從DeepQA項目進行重構(gòu)的原因,更清晰的數(shù)據(jù)預(yù)處理、訓練和服務(wù)。有新的變更可以添加到deepqa2/models中,然后在train.py和chatbotmanager.py變更一下。
有待改進的地方
a. 新建models/rnn2.py, 使用dropout。目前DeepQA中已經(jīng)使用了Drop.
b. tensorflow rc0.12.x中已經(jīng)提供了seq2seq network,可以更新成tf版本.
c. 融合訓練,目前model只有一個庫,應(yīng)該是設(shè)計一個新的模型,支持一個大庫和小庫,不同權(quán)重進行,就如Mechanism-Aware Neural Machine for Dialogue Response Generation的介紹。
d. 代碼支持多機多GPU運行。
e. 目前訓練的結(jié)果都是QA對,對于一個問題,可以有多個答案。
f. 目前沒有一個方法進行accuracy測試,一個思路是在訓練中就提供干擾項,因為當前只有正確的答案,如果提供錯誤的答案(而且越多越好),就可以使用recall_at_k方法進行測試。
機器人家上了解到的,希望對你有用
三、有哪些API接口可以用來做聊天機器人?
1.海知智能:
1. 海知智能第三方技能插件開放平臺概述 · ruyi.ai開發(fā)者文檔 · 看云docs.ruyi.ai
不光能聊天,還可以在網(wǎng)站里內(nèi)置技能,實現(xiàn)(翻譯,成語接龍等)數(shù)十項功能
2.天行機器人:
白嫖用戶綁定微信后有40000次永久額度,之后1元10000次
3.思知機器人:
AI機器人開放平臺 - 思知(OwnThink)www.ownthink.com
4.青云客智能機器人:
青云客智能聊天機器人APIapi.qingyunke.com
5.圖靈機器人:
圖靈機器人-智能好用的聊天機器人www.turingapi.com
圖靈的官網(wǎng)如果不充值好像每日請求次數(shù)很低很低,但好在可以通過其他api網(wǎng)站進行調(diào)取
6.小i機器人:
模版展示頁面nlp.xiaoi.com
但小i機器人沒有api使用文檔,想要使用就只能自己分析
import urllib.request
import re
message = “”
msg = urllib.parse.quote(message)
link=urllib.request.urlopen("http://nlp.xiaoi.com/robot/webrobot&callback=__webrobot_processMsg&data=%7B%22sessionId%22%3A%22ff725c236e5245a3ac825b2dd88a7501%22%2C%22robotId%22%3A%22webbot%22%2C%22userId%22%3A%227cd29df3450745fbbdcf1a462e6c58e6%22%2C%22body%22%3A%7B%22content%22%3A%22"+msg+"%22%7D%2C%22type%22%3A%22txt%22%7D")
html_doc = link.read().decode()
reply = re.findall(r'"content":"(.+?)\r\n"', html_doc)
print(reply)
可以通過這段python代碼進行輸入并取得輸出
四、如何和自動聊天機器人聊天?
找到自動聊天機器人app,與它進行對話就好。
可以與它智能對話,及時問答,百科信息,天氣,生活小知識,聊天調(diào)侃。
世界上最早的聊天機器人誕生于20世紀80年代,名為“阿爾貝特”,用BASIC語言編寫而成。今天的互聯(lián)網(wǎng)上,已出現(xiàn)“比利”、“艾麗斯”等聊天機器人等,中文的如“白絲魔理沙”、“烏賊娘”等由網(wǎng)友制作的聊天機器人。據(jù)悉,還有一個“約翰·列儂人工智能計劃”,以再現(xiàn)當年“披頭士”樂隊主唱的風采為目標。
人工智能(AI)和神經(jīng)網(wǎng)絡(luò)語言處理(NLP)技術(shù)得到了空前的發(fā)展,這意味著與機器人交談越來越接近于與真人發(fā)生交談?,F(xiàn)如今,開發(fā)人員可以很容易地找到各種提供了AI和NLP服務(wù)的API,他們甚至不需要了解AI和NLP的工作原理。部分提供這類服務(wù)的網(wǎng)站如下:Crunchable.io、Chatbots.io、Luis.ai、API.ai和Wit.ai。
以上就是關(guān)于chatbots翻譯相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
對主播最暖心的經(jīng)典語錄(祝主播越來越好的句子的詞)