NLP——倒排表

問答系統的回顧

在這裏插入圖片描述
圖中右側是一個知識庫,知識庫需要包含兩方面信息,每個數據需要包含每個問題和問題對應的答案。

假設用戶問了一句話:How do you like NLPCamp?這句話經過一系列的文本預處理之後,需要和知識庫的每個問題進行匹配,計算用戶輸入與每個問題的相似度,返回相似度最高的問題對應的答案。

這種方法有一個弊端,當知識庫數據量太大時,需要計算N次相似度,對於用戶的每個問題,都要和知識庫的所有問題進行匹配,再返回相似度最高的。

爲了避免計算知識庫中的所有數據,我們使用倒排表來解決該問題。

倒排表

倒排表的核心思路是要知道某一個單詞出現在哪一個文檔中。

現在有一個知識庫和詞典庫,詞典庫有所有出現的詞,例如詞典庫是【我們,今天,運動,昨天,上,課】。

對於下面四個文檔:

  • doc1:我們今天運動;
  • doc2:我們昨天運動;
  • doc3:你們上課;
  • doc4:你們上什麼課;

對於詞典中的每個詞,【我們】出現在文檔【doc1,doc2】,【今天】出現在【doc1】,以此類推,這樣就形成了一個倒排表。

當形成一個倒排表,當用戶輸入運動,需要返回一些和運動相關的文檔,這時候我們可以直接查詢出現【我們】的文檔,也就是【doc1,doc2】,這樣就不用遍歷整個知識庫。

當用戶輸入【我們上班】,如果沒有倒排表,需要將用戶輸入與整個知識庫進行匹配,這樣會耗費大量的時間。如果有了倒排表,可以直接查詢與【我們】,【上】,【班】相關的文檔。根據倒排表返回的文檔和用戶輸入計算相似度,返回相似度最高的文檔。

當用戶輸入【How do you like NLPCamp】,可以先選擇至少包含輸入句子中一個單詞的所有文檔,這是一次過濾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章