Closed3

Pinecone Text Clientを試す

kun432kun432

https://github.com/pinecone-io/pinecone-text

The Pinecone Text Client is a Python package that provides text utilities designed for seamless integration with Pinecone's sparse-dense (hybrid) semantic search.

This is a public preview ("Beta") version.

ハイブリッド検索のためのユーティリティらしい。Pinecone向けなのかもだけど、シンプルに書けそうでちょっと興味が出たので試してみる。

kun432kun432

Pinecone Text Clientでsparse-vectorの生成にはBM25とSPLADEが使える。

BM25の場合、日本語でやるならばトークナイザーを置き換える必要があると思う。BM25Encoderのコードを見ると、トークナイザーを置き換えることはできなさそうだけども、初期化の際に言語を指定できる様子。

https://github.com/pinecone-io/pinecone-text/blob/main/pinecone_text/sparse/bm25_encoder.py#L16-L40

サンプルコードに従うとこうなる。

from pinecone_text.sparse import BM25Encoder

corpus = ["こんにちは、今日はいいお天気ですね。",
          "おはようございます。今日の予定はなんでしょうか?",
          "おやすみなさい。疲れを残さないように。"]

bm25 = BM25Encoder(language="japanese")

実行してみると

ValueError                                Traceback (most recent call last)
<ipython-input-9-87b5dd0786e0> in <cell line: 8>()
      6 
      7 # Initialize BM25 and fit the corpus.
----> 8 bm25 = BM25Encoder(language="japanese")
      9 bm25.fit(corpus)

2 frames
/usr/local/lib/python3.10/dist-packages/nltk/stem/snowball.py in __init__(self, language, ignore_stopwords)
    104     def __init__(self, language, ignore_stopwords=False):
    105         if language not in self.languages:
--> 106             raise ValueError(f"The language '{language}' is not supported.")
    107         stemmerclass = globals()[language.capitalize() + "Stemmer"]
    108         self.stemmer = stemmerclass(ignore_stopwords)

ValueError: The language 'japanese' is not supported.

ステミングにNLTKのSnowball Stemmerを使っているらしいのだが、これが日本語には対応していない模様。

https://github.com/nltk/nltk/blob/00de04bdf94ede9969eca6434584dd9245ff0157/nltk/stem/snowball.py#L85-L106

このスクラップは2024/01/18にクローズされました