Boostcamp week11 day3 Passage Retrieval - Sparse Embedding
5593 ワード
単語ベースのドキュメント検索を勉強します.まず、ドキュメントの取得がどのような問題なのかを理解し、ドキュメントの取得方法を理解します.ドキュメント検索を行うには、段落埋め込みと呼ばれる埋め込み形式にドキュメントを変換する必要があります.段落埋め込みとは何かを理解しながら、単語に基づいて作成された段落埋め込みの疎埋め込みについて理解します.最も一般的なTF-IDFです.
Passage Retrieval - Sparse Embedding
BoW(n-gram)
– unigram (1-gram): It was the best of times => It, was, the, best, of, time
– bigram (2-gram): It was the best of times => It was, was the, the best, best of, of times
unigramの語彙sizeが100である場合、すべての可能なbi-gramの語彙sizeは100の平方10000である.2-gramはunigramが2つあるのでdimensionは元の2倍です.n高さは剥がれにくく、2グラムか3グラムが好きです. Term値を決定する方法
-Termがドキュメントに表示されるかどうか(バイナリ)
-Term Frequencyなど.(e.g. TF-IDF) Dimension of embedding vector : number of terms
-単語が多い
-n-グラムのnが大きいほど 増加 Termオーバーラップを正確に位置決めする必要がある場合に非常に有用である. 逆に意味(意味)は似ているが異なる単語は と比較できない.
-->これは、ドキュメントに特定の単語が含まれているかどうかを判断するのに役立ちます.
•Term Frequency(TF):語の出現頻度
•Inverse Document Frequency(IDF):単語が提供する情報量
ex) It was the best of times
it、was、the、of:よくありますが、提供される情報量は少ないです.
best,times:詳細情報の提供
ドキュメント内の単語の出現頻度
1. Raw count
2. Adjusted for doc length: raw count/num words (TF)
3. Other variants: binary, log normalization, etc.
単語が提供する情報量
DF=Termが存在する文書の数
N=文書総数
IDF(t)=logNDF(t)I D F(t)=\log\frac{N}{D F(t)}IDF(t)=logDF(t)N
TF(t,d)×IDF(t)T F(t, d)\times I D F(t)TF(t,d)×IDF(t)「a」「the」などの冠詞
:TFは高いかもしれませんが、IDFは0に近いかもしれません.
(ほとんどの文書において)N≒DF(t)]log(N/DF)≒0) あまり出てこない固有名詞(例えば、人名、地名など)}高TF-IDF:IDFの増大に伴い、全体TF-IDF値は 増加する.
ターゲット:計算されたTF-IDFを使用して、ユーザー・クエリーに最も関連するドキュメントを検索します.
1.ユーザーが入力したクエリーを
2.既存の単語辞書にないマークを除く
3.クエリーをドキュメントとして扱い、TF-IFを計算する
4.クエリーのTF-IDF値と各ドキュメントのTF-IDF値を乗算して類似度スコアを計算する
Score(D,Q)=∑term∈QTFIDF( term ,Q)∗TFIDF( term, D)\operatorname{Score}(D, Q)=\sum_{t e r m\in Q}\operatorname{TFIDF}(\text { term }, Q) *\operatorname{TFIDF}(\text { term, } D)Score(D,Q)=term∈Q∑TFIDF( term ,Q)∗TFIDF( term, D)
5.得点が最も高い文書を選択
TF-IDFの改善方法
Score(D,Q)=∑term∈QIDF( term )⋅ TFIDF ( term, D)⋅(k1+1)TFIDF( term, D)+k1⋅(1−b+b⋅∣D∣avgdl)\operatorname{Score}(D, Q)=\sum_{t e r m\in Q} I D F(\text { term })\cdot\frac{\text { TFIDF }(\text { term, } D)\cdot\left(k_{1}+1\right)}{\operatorname{TFIDF}(\text { term, } D)+k_{1}\cdot\left(1-b+b\cdot\frac{|D|}{a v g d l}\right)}Score(D,Q)=term∈Q∑IDF( term )⋅TFIDF( term, D)+k1⋅(1−b+b⋅avgdl∣D∣) TFIDF ( term, D)⋅(k1+1)
データセットをCorpusに設定し、tokenizingを行います.
Retrievalの手順は次のとおりです.
まず私が望むQuery問題を取得し,TF−idfベクトル化を行い,コーパスとtf−idfで学習した行列の類似度を内積として計算した.結果値は、Corpus個数に等しい値となり、各Corpusの中で最も類似度の高い前のk個のContextデータとして取得される.
Passage Retrieval - Sparse Embedding
Passage Retrieval
:問題に一致するドキュメントを検索(段落)
Passage Retrieval with MRC
Open-Domain Question Answering:大規模なドキュメントで問題の答えを検索し、Passage RetrievalとMRCを2つのステージに接続できます.
ページの取得方法
QueryとPassageを挿入し、類似道路をランキングし、最も類似度の高いPassageを選択します.
Passage Embedding and Sparse Embedding
Passage Embedding Space
Passage Embeddingのベクトル空間.
ベクトル化されたページを用いて,アルゴリズムでページ間の類似度などを計算することができる.
Sparse Embedding
Bag-of-Words(BoW)
1つのドキュメントには、単語が存在するかどうかに応じて1,0とマークされる語彙サイズがあります.
構成
– unigram (1-gram): It was the best of times => It, was, the, best, of, time
– bigram (2-gram): It was the best of times => It was, was the, the best, best of, of times
unigramの語彙sizeが100である場合、すべての可能なbi-gramの語彙sizeは100の平方10000である.2-gramはunigramが2つあるのでdimensionは元の2倍です.n高さは剥がれにくく、2グラムか3グラムが好きです.
-Termがドキュメントに表示されるかどうか(バイナリ)
-Term Frequencyなど.(e.g. TF-IDF)
Sparse Embeddingプロパティ
-単語が多い
-n-グラムのnが大きいほど
-->これは、ドキュメントに特定の単語が含まれているかどうかを判断するのに役立ちます.
TF-IDF(Term Frequency – Inverse Document Frequency)
•Term Frequency(TF):語の出現頻度
•Inverse Document Frequency(IDF):単語が提供する情報量
ex) It was the best of times
it、was、the、of:よくありますが、提供される情報量は少ないです.
best,times:詳細情報の提供
Term Frequency (TF)
ドキュメント内の単語の出現頻度
1. Raw count
2. Adjusted for doc length: raw count/num words (TF)
3. Other variants: binary, log normalization, etc.
Inverse Document Frequency (IDF)
単語が提供する情報量
DF=Termが存在する文書の数
N=文書総数
IDF(t)=logNDF(t)I D F(t)=\log\frac{N}{D F(t)}IDF(t)=logDF(t)N
TF-IDF for term t in document d
TF(t,d)×IDF(t)T F(t, d)\times I D F(t)TF(t,d)×IDF(t)
:TFは高いかもしれませんが、IDFは0に近いかもしれません.
(ほとんどの文書において)N≒DF(t)]log(N/DF)≒0)
TF-IDFを使用して類似度を求める
ターゲット:計算されたTF-IDFを使用して、ユーザー・クエリーに最も関連するドキュメントを検索します.
1.ユーザーが入力したクエリーを
2.既存の単語辞書にないマークを除く
3.クエリーをドキュメントとして扱い、TF-IFを計算する
4.クエリーのTF-IDF値と各ドキュメントのTF-IDF値を乗算して類似度スコアを計算する
Score(D,Q)=∑term∈QTFIDF( term ,Q)∗TFIDF( term, D)\operatorname{Score}(D, Q)=\sum_{t e r m\in Q}\operatorname{TFIDF}(\text { term }, Q) *\operatorname{TFIDF}(\text { term, } D)Score(D,Q)=term∈Q∑TFIDF( term ,Q)∗TFIDF( term, D)
5.得点が最も高い文書を選択
BM25
TF-IDFの改善方法
Score(D,Q)=∑term∈QIDF( term )⋅ TFIDF ( term, D)⋅(k1+1)TFIDF( term, D)+k1⋅(1−b+b⋅∣D∣avgdl)\operatorname{Score}(D, Q)=\sum_{t e r m\in Q} I D F(\text { term })\cdot\frac{\text { TFIDF }(\text { term, } D)\cdot\left(k_{1}+1\right)}{\operatorname{TFIDF}(\text { term, } D)+k_{1}\cdot\left(1-b+b\cdot\frac{|D|}{a v g d l}\right)}Score(D,Q)=term∈Q∑IDF( term )⋅TFIDF( term, D)+k1⋅(1−b+b⋅avgdl∣D∣) TFIDF ( term, D)⋅(k1+1)
コード練習
データセットをCorpusに設定し、tokenizingを行います.
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(tokenizer=tokenizer_func, ngram_range=(1,2))
ngram_range
は、(1,1)にonly unigram、(1,2)にunigramとbigram、(2,2)にonly bigramを使用することを示す.fit()
関数によってコーパスを学習し、学習ベクトルマシンのtransform()
関数によって変換する.Retrievalの手順は次のとおりです.
まず私が望むQuery問題を取得し,TF−idfベクトル化を行い,コーパスとtf−idfで学習した行列の類似度を内積として計算した.結果値は、Corpus個数に等しい値となり、各Corpusの中で最も類似度の高い前のk個のContextデータとして取得される.
sorted_result = np.argsort(-result.data)
doc_scores = result.data[sorted_result]
doc_ids = result.indices[sorted_result]
np.argsort
は役に立つように見えます.わかりました.Reference
この問題について(Boostcamp week11 day3 Passage Retrieval - Sparse Embedding), 我々は、より多くの情報をここで見つけました https://velog.io/@dayday/Boostcamp-week11-day2-Passage-Retrieval-Sparse-Embeddingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol