Frosty Friday Week123 Intermediate Cortex, Snowpark
こんにちは!がく@ちゅらデータエンジニア(50)です。
いやー、ほんと寒いですね!朝起きるのがきついです。
小1の娘が居ますが、なかなか起きないので大変ですw
こちらの17日目の記事になります。
Frosty Friday Week123 Intermediate Cortex, Snowpark
今回のチャレンジは、ヒンディー語のWebページからスクレイピングで持ってきて、TAGで解析し、それをSnowflakeのTRANSLATE関数を使って、英語に翻訳してみましょう!
っていうのがざっくりとしたチャレンジ内容です。
Week123のチャレンジ内容
ヒンディー語のURLとそれをスクレイピングし、TAG毎に分割するPython関数が準備されているので、これを使っていきましょう
完成形としては
こちらの出力をすることが最終目的になります。
今回の流れ
- Snowflakeで開発環境のセッティング(スキーマ作成)とテーブル作成を行う
- ローカルPCで、スクレイピングのPythonスクリプトを実行し、Snowflakeに書き込む
- 翻訳する
上記をすべてまとめて綺麗にやりたいなぁ・・・とは思ってはいるのですが、私のスキルが足りないこともあり、上記の流れで作成しています。
ローカル環境の設定
今回は、Snowflakeへ書き込むので、
pip install "snowflake-connector-python[pandas]"
を行います。
(pandasをsnowflake connector対応するのに必要っぽい)
また、本来ならば仮想環境を作ってやるべきかもとは思いましたが、無精して全体環境にインストールしています。
Snowflakeで環境作成
use role sysadmin;
use warehouse gaku_wh;
use database frosty_friday;
create or replace schema week123;
いつも通り、実行環境の設定、スキーマの作成を行います。
create or replace table WEEK123_SCRAPE_FROM_INDIANCULTURE (
TAG text
, CONTENT text
);
そして、スクレイピング結果を投入するテーブルを作成します。
スクレイピングとSnowflakeへの投入
scrape_text_from_urlは、問題で提供されていた関数をそのまま使います。
そして実行部分を追加
実行するには
python week123_1_scrape_only\ copy.py <メールアドレス> <アカウント識別子>
例
python week123_1_scrape_only\ copy.py *****@churadata.okinawa ******.ap-northeast-1.aws
この用に第一引数にメールアドレス、第2引数にSnowflakeのアカウント識別子です。
翻訳する
select * from WEEK123_SCRAPE_FROM_INDIANCULTURE;
こちらでヒンディー語が投入されます
SELECT
TAG
, CONTENT
, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'en') as TRASLATE
FROM
WEEK123_SCRAPE_FROM_INDIANCULTURE;
翻訳できました!!
日本語にしてみるならこちら
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'ja') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
うーん、日本語翻訳はあまりできてないなぁ・・・
中国語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'zh') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
8割ぐらい出来てる。翻訳できないものは、英語になるっぽい
オランダ語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'nl') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
9割以上できてる。
翻訳できないものは英語になる
フランス語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'fr') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
9割以上出来てる。
オランダ語とほとんど一緒。翻訳できないものは英語になる
出来ないものは、オランダ語と一緒だった。
処理も早かった(8秒)ので、フランス語変換などのキャッシュが使われているのではないかな
ドイツ語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'de') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
9割以上できてる。
オランダ語、フランス語と一緒。
たぶん、ラテン語系はほとんど同じモデルでやってるのかな?
処理も早かった
イタリア語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'it') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
他のラテン語系と一緒。失敗するものも、処理速度も
韓国語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'ko') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
他のラテン語と一緒、処理速度も
ポーランド語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'pl') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
ポルトガル語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'pt') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
ロシア語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'ru') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
スペイン語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'es') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
スウェーデン語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'sv') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
最後にもう一度日本語
SELECT TAG, CONTENT, SNOWFLAKE.CORTEX.TRANSLATE(content, 'hi', 'ja') as TRASLATE FROM WEEK123_SCRAPE_FROM_INDIANCULTURE;
他の言語は、8秒ぐらいで出来たのに、日本語に関しては、1分以上(WH sizeはXS)かかりました・・・・
失敗したら、ヒンディー語のママなのも日本語だけでした・・・・・
がんばってくれぇぇぇ
まとめ
先日、翻訳精度が世界一ぃぃぃぃとなったリリースがされていたタイミングでのチャレンジでしたので、とても楽しいお題でした。
自分が、普段Pythonでのコーディングを殆どやっていないので、あまりPythonicなコーディングとかできてません。
こちらをもっとリファインして
- 全部Python(Snowpark)で完結する。
- Python Worksheet で実装する。
- 無精せず、仮想環境を構築してそこで実行する。
をやりたいなぁと思っていますが、多分やらないだろうぁぁぁぁぁ
しかし、日本語だけ翻訳精度が悪かったのと、翻訳できないときにヒンディー語に変わるのとかはなんでだろうなぁ・・・
英語変換はできてるので、ヒンディー語→英語→日本語 みたいにしてみたらどうなるじゃろか・・・とか考えました。
Discussion