リリース報告エントリです。
kurenai(紅・くれない)をご紹介!
目次
kurenai 0.0.1
pip install kurenai
>>> from kurenai.rouge_scorer import RougeScorer >>> scorer = RougeScorer(["rouge1"]) >>> scorer.score('いぬ ねこ', 'いぬ ねこ') {'rouge1': Score(precision=1.0, recall=1.0, fmeasure=1.0)}
なぜkurenaiを作った?
google-researchのrouge-scoreライブラリは、デフォルトで日本語を扱えません。
>>> from rouge_score.rouge_scorer import RougeScorer >>> scorer = RougeScorer(["rouge1"]) >>> scorer.score('いぬ ねこ', 'いぬ ねこ') {'rouge1': Score(precision=0.0, recall=0.0, fmeasure=0.0)}
先日書いた記事のように、tokenizer引数にTokenizerを渡す必要があります。
これを毎回書くのが面倒と感じたので、ラップする実装を用意しました。
また、未来の私が簡単に使えるようにPyPIにも上げておくことにしました。
kurenai爆誕!
設計:rouge-scoreを薄くラップする
google-researchのrouge-scoreのソースコードを確認し、rouge_score.rouge_scorer.RougeScorer
と同じインターフェースを提供できるように努めています。
- importは
from kurenai.rouge_scorer import RougeScorer
- 本家のrouge_scoreの部分をkurenaiに置き換えるだけで済むようにしていく
RougeScorer
クラスはscore()
メソッドを持つ- 本家
RougeScorer
同様に、インターフェースrouge_score.scoring.BaseScorer
を実装 - 返り値は
rouge_score.scoring.Score
(実体はnamedtuple)
- 本家
うまくできたんじゃないかと内心鼻高々なのは、継承でなく委譲で実装した点。
https://github.com/ftnext/kurenai/blob/v0.0.1/src/kurenai/rouge_scorer.py#L9-L16
class RougeScorer(BaseScorer): def __init__(self, rouge_types: list[str]) -> None: self._scorer = OriginalRougeScorer( rouge_types, tokenizer=AllCharacterSupportTokenizer() ) def score(self, target, prediction): return self._scorer.score(target, prediction)
kurenaiの今後(TODOリスト)
今はまだ全然小さいライブラリですが、私の抱える課題のうち小さな1つは解決しているので、0.0.1をリリースしました。
ちょこちょこと以下を対応していく予定です。
- 各種ROUGEへの対応を確認(本家のテストコードを読んでkurenaiのテストに追加していく)
- 分かち書き処理もkurenaiに含める
- (
BaseScorer
インターフェースにはないが)本家RougeScorer
メソッドが持つscore_multi()
メソッド実装
終わりに
kurenai 0.0.1のリリース報告でした。
日本語テキストからROUGEを計算したい方、今はまだ分かち書きが必要ですが、rouge-scoreと同じインターフェースで使えます!
触ってみた感想や「こういうユースケースで使いたいんだけどサポートしてくれないか」といった要望、そしてリポジトリへのスターも、お待ちしています!
2本目も紹介したぞ〜(2/3)1
週末、やりたいことはいくつかあったのですが、とにかくコードが書きたくて、3つの小さな小さなライブラリをPyPIに公開!
— nikkie / にっきー (@ftnext) 2024年3月17日
今週のブログで紹介していきます
コード書き倒して、久々のふしゅ〜
- 1本目の紹介 ↩