NLP 傳統方法記錄

2021-10-08 13:10:43 字數 1238 閱讀 6514

平時學習中遇到的一些傳統的做法

給你乙個句子,和乙個文件庫。如果想找到與這個句子相關的文件,需要怎麼做?

先召回一批可能相關的,再利用embedding計算相似度。然後把召回得分與相似度得分加權。此時,可以考慮用bm25演算法對文件進行召回。

計算過程:對query中的每個詞,計算其與文件的相似度得分,然後加權。

只能考慮到重合詞的問題,無法顧及語義的資訊(傳統模型的通病)

核心公式:

s co

re(q

uery

,doc

)=∑i

=1nw

ir(q

i,do

c)

score(query,doc)=\sum_^w_ir(q_i,doc)

score(

quer

y,do

c)=∑

i=1n

​wi​

r(qi

​,do

c)w

iw_i

wi​是idf值,q

iq_i

qi​是query中的詞

具體原理見:自然語言處理-bm25相關度打分

關於搜尋,可以看這篇

深入理解搜尋引擎原理

利用bm25演算法召回了一批文件,得到了其embedding的矩陣(每個文件是乙個向量)。如何更快計算query與所有文件的相似度呢?

faiss流程與原理分析

faiss是facebook ai團隊開源的針對聚類和相似性搜尋庫,為稠密向量提供高效相似度搜尋和聚類,支援十億級別向量的搜尋,是目前最為成熟的近似近鄰搜尋庫。它包含多種搜尋任意大小向量集(備註:向量集大小由ram記憶體決定)的演算法,以及用於演算法評估和引數調整的支援**。faiss用c++編寫,並提供與numpy完美銜接的python介面。除此以外,對一些核心演算法提供了gpu實現。

還可以參照這篇:faiss相似性搜尋類庫

所以說,基於業務詞典,就是給你乙個詞庫,如果句子中的詞存在於詞庫中,就提取出來。

自己的想法:

遍歷句子中的詞,如果詞在詞庫中,就抽出來。

時間複雜度o(n

∗m

)o(n*m)

o(n∗m)

,n 是句子長度,m是詞庫詞數。

如果詞庫很大,時間複雜度就很高

優化的方法,這是乙個多模式匹配問題,解決方案是ac自動機演算法,將詞庫構建成樹,只需遍歷一遍句子(應該是無需分詞?)就可以得到結果。

NLP 2 語言結構和傳統pipeline

依賴語言符號 sign 定義更重要的概念 語言是一組符號,語法包含 一組signs,語言的詞典 lexicon 和有限的操作使乙個sign對映到另乙個 語法生成語言,當操作了一定數量次數的語法在他的詞典上 語法操作分為 上一章說的四個部分,同時進行 也有一些嚴格在morphology和syntax或...

NLP資料增強方法

以下是一些針對文字的資料的增強方法 隨機drop和shuffle 資料增強主要採取兩種方法,一種是 drop,對於標題和描述中的字或詞,隨機的進行刪除,用空格代替。另一種是 shuffle,即打亂詞序。對於 如何評價 2017 知乎看山杯機器學習比賽?這個問題,使用 drop 對詞層面進行處理之後,...

NLP資訊提取工作記錄

將各個醫院不同格式的病歷中的資訊提取出來,這些資訊包括姓名 出生地 年齡 疾病史 出院情況 出院有什麼症狀,有哪些 歷史等資訊。資訊提取後還應將這些資訊按照專案乙個個的儲存到mysql資料庫中。由簡至繁的的描述。簡單和複雜的區別主要由待提取的資訊的複雜度來描述。1,有限可窮舉情況 最簡單的為性別,只...