Boostcamp week11 day3 Passage Retrieval - Sparse Embedding

5593 ワード

単語ベースのドキュメント検索を勉強します.まず、ドキュメントの取得がどのような問題なのかを理解し、ドキュメントの取得方法を理解します.ドキュメント検索を行うには、段落埋め込みと呼ばれる埋め込み形式にドキュメントを変換する必要があります.段落埋め込みとは何かを理解しながら、単語に基づいて作成された段落埋め込みの疎埋め込みについて理解します.最も一般的なTF-IDFです.

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とマークされる語彙サイズがあります.
構成
  • 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)
  • Sparse Embeddingプロパティ

  • Dimension of embedding vector : number of terms
    -単語が多い
    -n-グラムのnが大きいほど
  • 増加
  • Termオーバーラップを正確に位置決めする必要がある場合に非常に有用である.
  • 逆に意味(意味)は似ているが異なる単語は
  • と比較できない.
    -->これは、ドキュメントに特定の単語が含まれているかどうかを判断するのに役立ちます.

    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)=log⁡NDF(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)
  • 「a」「the」などの冠詞
    :TFは高いかもしれませんが、IDFは0に近いかもしれません.
    (ほとんどの文書において)N≒DF(t)]log(N/DF)≒0)
  • あまり出てこない固有名詞(例えば、人名、地名など)}高TF-IDF:IDFの増大に伴い、全体TF-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.得点が最も高い文書を選択

    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は役に立つように見えます.わかりました.