DeepLでYoutube翻訳したい。
私、最近DeepLに課金しましたので、使い倒してやろうと考えてます。英語のページやYoutubeで使おうと考えていたのですが、ハマった部分があったのでメモとして残します。
対象者
※残念ながら、リアルタイムでDeepLを使って翻訳する方法は見つけられておりません。
単純なやり方。
文字起こしを表示させる
もし、タイムスタンプが表示されている場合切り替える
そのまま貼り付けると、字幕の改行がそのまま反映されてしまうので、前処理を入れる必要があります。改行を処理してくれます。
sunafukey.fc2web.com もしくは、なぞり翻訳をつかうことで解決できます。
基本的に上記までを紹介しているサイトが多いのですが、今回問題が発生したので対応する必要がありました。
自動の文字起こしは句読点が付与されない
Youtubeの英語動画を度々みていて、気づいたのですが句読点が付与されているものと、一切句読点が付与されていないものに分けられます。
Youtubeの字幕テキストについて
実は、Youtubeの字幕テキストは、句読点がついているものとそうでないものがあります。 基本的には句読点無のものが多く、その場合DeepLで大きな問題を引き起こします。
DeepLの問題点:辻褄合わせ
DeepLの場合辻褄合わせが行われることが知られています。 日本語と英語が必ずしも、同じ文章量にはなりません。しかし、圧倒的に文章量の圧縮が起きています。
toggeterの方でまとめられていますが、ごっそりと、DeepLの翻訳が省略されることがあります。 これと音声認識の文章の相性が悪いように感じます。音声認識ですから、句読点の切れ目を見つけることは難しく、一文が長くなるので、認識精度も悪くなります。
一方でGoogle翻訳の場合は、省略は行わず翻訳した後に句読点を付与してくれます。翻訳のなめらかさは、DeepLに劣りますが、一番手軽に省略された翻訳を防ぐ手段としてかなり有用です。
なんとか句読点を付与する方法
DeepLの勝手に省略してしまう問題を根本的に解決するわけではないですが、Youtubeで字幕を翻訳して題意をつかむ程度なら、十分だと感じましたので紹介します。
nnsplit
pythonベースで簡単に利用できる。python使える人だったらすぐ。 github.com
一応使い方*1
pipでインストールして
//Install NNSplit with pip:
pip install nnsplit
必用に応じで、This is~の文字列部分を変更する。
from nnsplit import NNSplit splitter = NNSplit.load("en") # returns `Split` objects splits = splitter.split(["This is a test This is another test."])[0] # a `Split` can be iterated over to yield smaller splits or stringified with `str(...)`. for sentence in splits: print(sentence)
出力されるのでリダイレクトで好きなテキストに放り込む等すれば使えます。
printのところは下記の処理を行うと、 - 先頭大文字 - 末尾空白削除 - ピリオド付与
使いやすいです。
for sentence in splits: print(string.capwords(str(sentence)).capitalize()+".")
プログラムが使えない場合
プログラムが使えない場合手間はかかりますが、下記のデモサイトでピリオドを自分で付与するのが楽かなと思います。
他の対策
nnsplit以外にも何個かツールは存在するので紹介します。
We have published a model for text repunctuation and recapitalization for four languages / Habr
googlecolabでプログラムを実行するという手段もあります。 一回すべてをRUNにした後 colab.research.google.com
下記Enter input textの部分に入力すれば、勝手に文章に句読点が付与されます。
句読点付与ありのDeepL翻訳
先ほどより比較的文章量も多めで翻訳できました。これで今回はやりたいことに近づけることができました。
まとめ
音声認識で文字起こしされたものは、句読点が分かり辛く翻訳の精度に影響を与える。そのため、句読点無の文章から句読点を付与する必要があり、2つの方法を紹介した。 また、検索している途中に気づいたのですが、googleのAPIを使えば句読点付きで文章を返してくれるようです。