🦔

Frosty Friday Week123 Intermediate Cortex, Snowpark

こんにちは!がく@ちゅらデータエンジニア(50)です。

いやー、ほんと寒いですね!朝起きるのがきついです。
小1の娘が居ますが、なかなか起きないので大変ですw

https://qiita.com/advent-calendar/2024/frostyfriday

こちらの17日目の記事になります。

Frosty Friday Week123 Intermediate Cortex, Snowpark

今回のチャレンジは、ヒンディー語のWebページからスクレイピングで持ってきて、TAGで解析し、それをSnowflakeのTRANSLATE関数を使って、英語に翻訳してみましょう!

っていうのがざっくりとしたチャレンジ内容です。

Week123のチャレンジ内容

ヒンディー語のURLとそれをスクレイピングし、TAG毎に分割するPython関数が準備されているので、これを使っていきましょう

完成形としては

こちらの出力をすることが最終目的になります。

今回の流れ

  1. Snowflakeで開発環境のセッティング(スキーマ作成)とテーブル作成を行う
  2. ローカルPCで、スクレイピングのPythonスクリプトを実行し、Snowflakeに書き込む
  3. 翻訳する

上記をすべてまとめて綺麗にやりたいなぁ・・・とは思ってはいるのですが、私のスキルが足りないこともあり、上記の流れで作成しています。

ローカル環境の設定

今回は、Snowflakeへ書き込むので、

pip install "snowflake-connector-python[pandas]"

を行います。
(pandasをsnowflake connector対応するのに必要っぽい)

また、本来ならば仮想環境を作ってやるべきかもとは思いましたが、無精して全体環境にインストールしています。

Snowflakeで環境作成

https://github.com/gakut12/Frosty-Friday/blob/main/week123_intermediate_cortex_snowpark/week123_1_1.sql

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への投入

https://github.com/gakut12/Frosty-Friday/blob/main/week123_intermediate_cortex_snowpark/week123_1_scrape_only copy.py

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;

こちらでヒンディー語が投入されます

https://docs.snowflake.com/en/sql-reference/functions/translate-snowflake-cortex

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