作者:Priscilla Parodi
會話界面已經(jīng)存在了一段時間,并且作為協(xié)助各種任務(wù)(例如客戶服務(wù)、信息檢索和任務(wù)自動化)的一種方式而變得越來越流行。 通常通過語音助手或消息應(yīng)用程序訪問,這些界面模擬人類對話,以幫助用戶更有效地解決他們的查詢。
隨著技術(shù)的進(jìn)步,聊天機器人被用來處理更復(fù)雜的任務(wù) —— 而且速度更快 —— 同時仍然為用戶提供個性化的體驗。 自然語言處理 (NLP) 使聊天機器人能夠處理用戶的語言,識別其消息背后的意圖,并從中提取相關(guān)信息。 例如,命名實體識別通過將文本分類為一組類別來提取文本中的關(guān)鍵信息。 情緒分析確定情緒基調(diào),而問題回答則確定查詢的 “答案”。 NLP 的目標(biāo)是使算法能夠處理人類語言并執(zhí)行歷史上只有人類才能完成的任務(wù),例如在大量文本中查找相關(guān)段落、總結(jié)文本以及生成新的原創(chuàng)內(nèi)容。
這些高級 NLP 功能建立在稱為向量搜索的技術(shù)之上。 Elastic 原生支持向量搜索,執(zhí)行精確和近似 k 最近鄰 (kNN) 搜索,以及 NLP,支持直接在 Elasticsearch 中使用自定義或第三方模型。
在這篇博文中,我們將探討向量搜索和 NLP 如何增強聊天機器人的功能,并展示 Elasticsearch 如何促進(jìn)這一過程。 讓我們從向量搜索的簡要概述開始。
向量搜索
盡管人類可以理解書面語言的含義和語境,但機器卻做不到。 這就是向量的用武之地。通過將文本轉(zhuǎn)換為矢量表示(文本含義的數(shù)字表示),機器可以克服這一限制。 與傳統(tǒng)搜索相比,向量不是依賴關(guān)鍵字和基于頻率的詞匯搜索,而是使用為數(shù)值定義的操作來處理文本數(shù)據(jù)。
這允許向量搜索通過使用 “嵌入空間” 中的距離來表示給定查詢向量的相似性來定位共享相似概念或上下文的數(shù)據(jù)。 當(dāng)數(shù)據(jù)相似時,對應(yīng)的向量也會相似。
向量搜索不僅用于 NLP 應(yīng)用程序,還用于涉及非結(jié)構(gòu)化數(shù)據(jù)的各種其他領(lǐng)域,包括圖像和視頻處理。
在聊天機器人流程中,可以有多種用戶查詢方法,因此,有不同的方法來改進(jìn)信息檢索以獲得更好的用戶體驗。 由于每個備選方案都有其自身的一系列優(yōu)點和可能的缺點,因此必須考慮可用的數(shù)據(jù)和資源,以及培訓(xùn)時間(適用時)和預(yù)期的準(zhǔn)確性。 在下一節(jié)中,我們將介紹問答 NLP 模型的這些方面。
問答式
問答 (QA) 模型是一種 NLP 模型,旨在回答以自然語言提出的問題。 當(dāng)用戶的問題需要從多個資源中推斷出答案,而文檔中沒有預(yù)先存在的目標(biāo)答案時,生成 QA 模型會很有用。 然而,這些模型的計算成本可能很高,并且需要大量數(shù)據(jù)來進(jìn)行領(lǐng)域相關(guān)訓(xùn)練,這可能會降低它們在某些情況下的實用性,盡管這種方法對于處理域外問題特別有價值。
另一方面,當(dāng)用戶對特定主題有疑問并且文檔中有實際答案時,可以使用提取式 QA 模型。 這些模型直接從源文檔中提取答案,提供透明和可驗證的結(jié)果,使它們成為希望提供簡單有效的問題回答方式的企業(yè)或組織的更實用的選擇。
下面的示例演示了如何使用預(yù)訓(xùn)練的提取式 QA 模型(可在 Hugging Face 上獲得并部署到 Elasticsearch 中)從給定上下文中提取答案:
POST _ml/trained_models/deepset__minilm-uncased-squad2/deployment/_infer
{
"docs": [{"text_field": "Canvas is a data visualization and presentation application within Kibana. With Canvas, live data can be pulled directly from Elasticsearch and combined with colors, images, text, and other customized options to create dynamic, multi-page displays."}],
"inference_config": {"question_answering": {"question": "What is Kibana Canvas?"}}
}
{
"predicted_value": "a data visualization and presentation application",
"start_offset": 10,
"end_offset": 59,
"prediction_probability": 0.28304219431376443
}
部署經(jīng)過訓(xùn)練的模型。
將模型添加到推理攝取管道。
處理用戶查詢和檢索信息的方法多種多樣,在處理非結(jié)構(gòu)化數(shù)據(jù)時,使用多種語言模型和數(shù)據(jù)源可能是一種有效的替代方法。 為了說明這一點,我們有一個聊天機器人的數(shù)據(jù)處理示例,該聊天機器人用于響應(yīng)查詢并考慮從選定文檔中提取的數(shù)據(jù)。
聊天機器人數(shù)據(jù)處理:NLP 和向量搜索
如上所示,我們的聊天機器人的數(shù)據(jù)處理可以分為三個部分:
- 向量處理:這部分將文檔轉(zhuǎn)換為向量表示。
- 用戶輸入處理:這部分從用戶查詢中提取相關(guān)信息,進(jìn)行語義搜索和混合檢索。
- 優(yōu)化:這部分包括監(jiān)控,對于確保聊天機器人的可靠性、最佳性能和良好的用戶體驗至關(guān)重要。
向量處理
對于處理部分,第一步是確定每個文檔的組成部分,然后將每個元素轉(zhuǎn)換為向量表示; 可以為范圍廣泛的數(shù)據(jù)格式創(chuàng)建這些表示。
有多種方法可用于計算嵌入,包括預(yù)訓(xùn)練模型和庫。
請務(wù)必注意,對這些表示進(jìn)行搜索和檢索的有效性取決于現(xiàn)有數(shù)據(jù)以及所用方法的質(zhì)量和相關(guān)性。
在計算矢量時,它們以 dense_vector 字段類型存儲在 Elasticsearch 中。
PUT <target>
{
"mappings": {
"properties": {
"doc_part_vector": {
"type": "dense_vector",
"dims": 3
},
"doc_part" : {
"type" : "keyword"
}
}
}
}
聊天機器人用戶輸入處理
對于用戶部分,在收到問題后,在繼續(xù)之前從中提取所有可能的信息是很有用的。 這有助于理解用戶的意圖,在這種情況下,我們使用命名實體識別模型 (NER) 來幫助實現(xiàn)這一點。 NER 是識別命名實體并將其分類為預(yù)定義實體類別的過程。
POST _ml/trained_models/dslim__bert-base-ner/deployment/_infer
{
"docs": { "text_field": "How many people work for Elastic?"}
}
{
"predicted_value": "How many people work for [Elastic](ORG&Elastic)?",
"entities": [
{
"entity": "Elastic",
"class_name": "ORG",
"class_probability": 0.4993975435876747,
"start_pos": 25,
"end_pos": 32
}
]
}
雖然不是必要的步驟,但通過使用結(jié)構(gòu)化數(shù)據(jù)或上述或其他 NLP 模型結(jié)果對用戶的查詢進(jìn)行分類,我們可以使用過濾器限制 kNN 搜索。 這有助于通過減少需要處理的數(shù)據(jù)量來提高性能和準(zhǔn)確性。
"filter": {
"term": {
"org": "Elastic"
}
}
語義搜索和混合檢索
由于提示源自用戶查詢,而聊天機器人需要處理具有可變性和歧義性的人類語言,因此語義搜索非常適合。 在 Elasticsearch 中,你可以通過將查詢字符串和嵌入模型的 ID 傳遞到 query_vector_builder 對象來一步執(zhí)行語義搜索。 這將向量化查詢并執(zhí)行 kNN 搜索以檢索與查詢含義最接近的前 k 個匹配項:
POST /<target>/_search
{
"knn": {
"field": "doc_part_vector",
"k": 5,
"num_candidates": 20,
"query_vector_builder": {
"text_embedding": {
"model_id": "<text-embedding-model-id>",
"model_text": "<query_string>"
}
}
}
}
端到端示例:如何部署文本嵌入模型并將其用于語義搜索。
Elasticsearch 使用 Okapi BM25 的 Lucene 實現(xiàn)(一種稀疏模型)對文本查詢的相關(guān)性進(jìn)行排名,而密集模型(dense models)則用于語義搜索。 為了結(jié)合矢量匹配和從文本查詢中獲得的匹配兩者的優(yōu)勢,你可以執(zhí)行混合檢索:
POST <target>/_search
{
"query": {
"match": {
"content": {
"query": "<query_string>"
}
}
},
"knn": {
"field": "doc_part_vector",
"query_vector_builder": {
"text_embedding": {
"model_id": "<text-embedding-model-id>",
"model_text": "<query_string>"
}
},
"filter": {
"term": {
"org": "Elastic"
}
}
}
}
結(jié)合稀疏和密集模型通常會產(chǎn)生最好的結(jié)果
稀疏模型通常在短查詢和特定術(shù)語上表現(xiàn)更好,而密集模型則利用上下文和關(guān)聯(lián)。 如果你想了解更多關(guān)于這些方法如何比較和相互補充的信息,我們在這里將 BM25 與兩個專門針對檢索進(jìn)行訓(xùn)練的密集模型進(jìn)行基準(zhǔn)測試。
最相關(guān)的結(jié)果通??梢允墙o用戶的第一個答案,_score 是一個用來確定返回文檔相關(guān)性的數(shù)字。
聊天機器人優(yōu)化
為了幫助改善聊天機器人的用戶體驗、性能和可靠性,除了應(yīng)用混合評分之外,你還可以采用以下方法:
情緒分析:為了在對話展開時了解用戶評論和反應(yīng),你可以合并情緒分析模型:
POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer
{
"docs": { "text_field": "That was not my question!"}
}
{
"predicted_value": "NEGATIVE",
"prediction_probability": 0.980080439016437
}
GPT 的功能:作為增強整體體驗的替代方案,你可以將 Elasticsearch 的搜索相關(guān)性與 OpenAI 的 GPT 問答功能結(jié)合起來,利用 Chat Completion API 將這些前 k 個文檔作為上下文返回給用戶模型生成的響應(yīng)。 提示:“answer this question <user_question> using only this document <top_search_result>”。詳細(xì)閱讀 “ChatGPT 和 Elasticsearch:OpenAI 遇見私有數(shù)據(jù)(一)”。
可觀察性:確保任何聊天機器人的性能都至關(guān)重要,而監(jiān)控是實現(xiàn)這一目標(biāo)的重要組成部分。 除了捕獲聊天機器人交互的日志之外,跟蹤響應(yīng)時間、延遲和其他相關(guān)聊天機器人指標(biāo)也很重要。 通過這樣做,你可以識別模式、趨勢,甚至檢測異常。 Elastic 可觀察性工具使你能夠收集和分析這些信息。
總結(jié)
這篇博文涵蓋了 NLP 和矢量搜索是什么,并深入研究了一個聊天機器人的示例,該聊天機器人通過考慮從文檔的矢量表示中提取的數(shù)據(jù)來響應(yīng)用戶查詢。
正如所展示的那樣,使用 NLP 和矢量搜索,聊天機器人能夠執(zhí)行超出結(jié)構(gòu)化目標(biāo)數(shù)據(jù)的復(fù)雜任務(wù)。 這包括使用多個數(shù)據(jù)源和格式作為上下文來提出建議和回答特定產(chǎn)品或業(yè)務(wù)相關(guān)的查詢,同時還提供個性化的用戶體驗。
用例范圍從通過協(xié)助客戶查詢來提供客戶服務(wù)到通過提供分步指導(dǎo)、提出建議甚至自動化任務(wù)來幫助開發(fā)人員查詢。 根據(jù)目標(biāo)和現(xiàn)有數(shù)據(jù),還可以利用其他模型和方法來獲得更好的結(jié)果并改善整體用戶體驗。
以下是有關(guān)該主題的一些可能有用的鏈接:
- 如何部署自然語言處理 (NLP):入門
- Elasticsearch 中圖片相似度搜索概述
- ChatGPT 和 Elasticsearch:OpenAI 遇見私有數(shù)據(jù)
- 使用 OpenTelemetry 和 Elastic 監(jiān)控 OpenAI API 和 GPT 模型
- IT 領(lǐng)導(dǎo)者需要矢量搜索來改善搜索體驗的 5 個原因
通過在 Elasticsearch 中整合 NLP 和本機矢量搜索,你可以利用其速度、可擴(kuò)展性和搜索功能來創(chuàng)建能夠處理大量結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的高效聊天機器人。
準(zhǔn)備好開始了嗎? 開始免費試用 Elastic Cloud。
在這篇博文中,我們可能已經(jīng)使用或參考了由其各自所有者擁有和運營的第三方生成人工智能工具。 Elastic 對第三方工具沒有任何控制權(quán),我們對其內(nèi)容、操作或使用不承擔(dān)任何責(zé)任,也不對你使用此類工具可能產(chǎn)生的任何損失或損害承擔(dān)任何責(zé)任。 使用帶有個人、敏感或機密信息的 AI 工具時請謹(jǐn)慎行事。 你提交的任何數(shù)據(jù)都可能用于人工智能訓(xùn)練或其他目的。 無法保證你提供的信息將得到安全保護(hù)或保密。 在使用之前,你應(yīng)該熟悉任何生成人工智能工具的隱私慣例和使用條款。文章來源:http://www.zghlxwxcb.cn/news/detail-724766.html
Elastic、Elasticsearch 和相關(guān)標(biāo)志是 Elasticsearch N.V. 在美國和其他國家/地區(qū)的商標(biāo)、徽標(biāo)或注冊商標(biāo)。 所有其他公司和產(chǎn)品名稱均為其各自所有者的商標(biāo)、徽標(biāo)或注冊商標(biāo)。文章來源地址http://www.zghlxwxcb.cn/news/detail-724766.html
到了這里,關(guān)于Elasticsearch:在 Elasticsearch 中使用 NLP 和向量搜索增強聊天機器人功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!