nikkie-ftnextの日記

イベントレポートや読書メモを発信

分かち書きした日本語テキストからROUGEをデフォルトで算出できる kurenai (紅) 0.0.1 をリリースしました💄

リリース報告エントリです。
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


  1. 1本目の紹介