Jigsaw Rate Severity of Toxic Comments(googletransで翻訳)

文字列データは逆翻訳というもので水増しするといいらしい!

参考サイト

逆翻訳を使ったテキストデータ水増し – Kaggle Note

Using Google Translate for NLP Augmentation | Kaggle

やってみる

早速エラーだ!

!pip install --quiet googletrans
from googletrans import Translator

translator = Translator()

#この2行で日本語から英語に翻訳しています
#この処理のときにgoogle翻訳のサービスを使っている
# translation = translator.translate("ここに翻訳したい文字列を入れる", src='ja', dest="en")
translation = translator.translate("ここに翻訳したい文字列を入れる", dest="en")

#翻訳されて英語を出力できます!
print(translation.text)
AttributeError: 'NoneType' object has no attribute 'group'

調べてみたところ、新しいライブラリをインストールするとうまくいくとのこと、たしかにうまくいった!一度読み込んだ古いほうのライブラリをアンインストールせずに新しいバージョンのライブラリをインストールしようとしてもエラーはきえなかったけど、新しくカーネル立ち上げて新しいバージョン読み込んだらうまくいった。理由はあまりわからない。

【python】googletransの『AttributeError: 'NoneType' object has no attribute 'group'』対策【2021/01/12追記】 - Qiita

!pip install --quiet googletrans==4.0.0-rc1
from googletrans import Translator

translator = Translator()

#この2行で日本語から英語に翻訳しています
#この処理のときにgoogle翻訳のサービスを使っている
translation = translator.translate("ここに翻訳したい文字列を入れる", src='ja', dest="en")
# translation = translator.translate("ここに翻訳したい文字列を入れる", dest="en")

#翻訳されて英語を出力できます!
print(translation.text) # Insert the string you want to translate here

ひとまずちょいと元のテキストが何語なのかを判定。英語以外が混じっているかもしれないし。そしたらなんかエラーでてきた。。理由がよくわからないが、おそらく多くの処理をかけすぎてはじかれているっぽい。エラーハンドリングしてみる。ほぼほぼ英語ですな。ただ、これものすごい時間がかかった。。

def detect_lang(x):
    try:
        ret = translator.detect(x).lang
    except Exception as e:    
        ret = "dummy"
    return ret

translator = Translator()

i= 0
step = 500
adds = []
while i <= 10000:
# while i <= len(df):
    print(i)
    i+= step
    add = df["text"].iloc[i - step:i].apply(detect_lang)
    adds.append(add)
    
add_lang = pd.concat(adds, axis= 0, sort= True)
add_lang.name = "org_lang"
df = pd.merge(df, add_lang, left_index= True, right_index= True, how= "left")
df.org_lang.value_counts()
en       7131
dummy    3335
fr          5
de          5
es          2
pl          2
ja          2
fy          2
nl          2
yo          1
ar          1
mt          1
hr          1
pt          1
cy          1
el          1
hu          1
vi          1
ha          1
iw          1
gd          1
bg          1
eo          1
Name: org_lang, dtype: int64

諸々やりましたが翻訳するには先にテキストをきれいにしてからの方がよさそうなので、そっち先にやります!