⌘ + ⌥ + g
グループ化⌘ + ⌥ + shift + g
グループ化解除単一、複数オブジェクトをactiveにしておく → shift + ctrl
コピーしたオブジェクトと水平(?)にコピペができる
「クチコミ分析システムの作り方 実践・自然言語処理シリーズ」を読んでる
memo
- 主観表現辞書の作成
- ①評価表現
- 辞書中の語(特に形容詞、形容動詞)を中心に全列挙
- 評価表現を多数含むテキストに人手でアノテーションする
- どっちも併用すると良い
- ②評価極性を付与
- きれい:P、臭い:N
- ホラー映画の怖いはNじゃなくてPかもしれないので場合による注意
- 評価表現辞書は公開されているぞ
- ①評価表現
- 評価表現の抽出方法
- ①評価表現辞書を辞書照合手法でテキストから核表現を抽出する
- ②核表現を中心とした(?)評価表現抽出パタンを用意し、前後の副詞や接辞、付属語などを含めた評価表現全体を抽出する
Seleniumを使って、dl > dt, ddのフォーマットでddが複数あるときのスクレイピング
こういうやつ
<dl> <dt></dt> <dd></dd> <dd></dd> <dt></dt> <dd></dd> </dl>
dtとddで1対1かしらとか思ってたけど、そうじゃなかったねめんどくさい。
というわけでゴリ押してみた
def add_values(values, _values): if len(_values) > 0: values.append(_values) def get_data(driver): ds = driver.find_elements_by_css_selector('dl > *') keys = [] values = [] _values = [] n = len(ds) i = 0 while n > i: d = ds[i] if d.tag_name == 'dt': keys.append(d.text) add_values(values, _values) _values = [] i += 1 continue if d.tag_name == 'dd': _values.append(d.text) i += 1 continue add_values(values, _values) return dict(zip(keys, values))
途中でddがきたら、dtが来るまでため続けて、dtがきたらddをvaluesのlistに追加してクリアするを繰り返す。
jqueryみたいにnextとか使えたら。。。って思うけどまぁいいや(多分これで大丈夫なはず)。さっと作ったので多分ボロいはず
SageMakerで遊ぶメモ#2
trainしてs3にアップされたモデルをデプロイするコード
from boto3.session import Session class SagemakerClient: def __init__(self): self.client = Session().client("sagemaker", region_name="us-west-2") def create_model(self, model_data_url): model_params = { "ExecutionRoleArn": "hogehoge-fugafuga:role/aipa-sagemaker-train", "ModelName": "sample-model", # モデル名 "PrimaryContainer": { "Image": "hogehoge-fugafuga.com/aipa-sagemaker-test", # ECRにプッシュしたイメージURL "ModelDataUrl": model_data_url # モデルデータが格納されているS3のパス } } self.client.create_model(**model_params) if __name__ == '__main__': model_data_url = 's3://aipa-hogehoge-fugafuga-train/output-data/sample-training2/output/model.tar.gz' SagemakerClient().create_model(model_data_url)
ここから推論ってどうするんや・・・・?って気になったので調べてたら下記が参考になった(考え方ね)
そもそも、チュートリアルにあるnginx.confとかwsgi.pyってなんで???なしてFlask使っているの???って思ってたけど、エンドポイントでの通信はHTTPで行われるので、登録するDocker imageではFlaskやnginx等の設定が必要とのこと。webのミドルウェアかwsgiを使えない人には厳しそう。。。コピペするだけで良いとは思うけど
SageMakerで遊ぶメモ#1
↑の記事を参考にして進めた。
諸事情でIAMユーザー発行&アクセスキー等発行できないので、EC2インスタンス上で行った。リージョンはオレゴン
IAM
- roleを作成
aipa-hogehoge-fugafuga-train
- policy
- AmazonEC2ContainerRegistryFullAccess
- AmazonS3FullAccess
- AmazonSageMakerFullAccess
- 信頼されたエンティティ
- ec2.amazonaws.com
- sagemaker.amazonaws.com
S3
s3://aipa-hogehoge-fugafuga-train
で作成
手順
$ sudo apt update -y $ sudo apt install awscli $ aws ecr create-repository --repository-name aipa-hogehoge-fugafuga-test --region us-west-2 # チュートリアル $ git clone https://github.com/aws/amazon-sagemaker-examples.git $ cd amazon-sagemaker-examples/advanced_functionality/scikit_bring_your_own/container/ $ aws s3 cp local_test/test_dir/input/data/training/iris.csv s3://aipa-sagemaker-train/input-data/ $ aws s3 cp .gitkeep s3://aipa-sagemaker-train/output-data/ $ touch .gitkeep $ bash build_and_push.sh aipa-hogehoge-fugafuga-test $ python sagemaker_client.py
sagemaker_client.py
from boto3.session import Session class SagemakerClient: def __init__(self): self.client = Session().client("sagemaker", region_name="us-west-2") def submit_training_job(self): training_params = { "TrainingJobName": "sample-training", # トレーニングのジョブ名(同じ名前は駄目) "HyperParameters": { # 学習時のパラメータ 'objective': 'multiclass', 'num_class': '3' }, "AlgorithmSpecification": { 'TrainingImage': "hogehoge.aws.com/aipa-hogehoge-fugafuga-test:latest", # トレーニング時に使用するDocker イメージ 'TrainingInputMode': 'File' }, "RoleArn": "arn:aws:iam::129119569090:role/aipa-hogehoge-fugafuga-train", # SageMakerにアタッチするロール "InputDataConfig": [ { 'ChannelName': 'training', 'DataSource': { 'S3DataSource': { 'S3DataType': 'S3Prefix', # s3上のファイルを使う場合はこちらを指定する 'S3Uri': "s3://aipa-hogehoge-fugafuga-train/input-data/iris.csv" # トレーニング時に使用するデータを入れたS3のパス } } } ], "OutputDataConfig": { 'S3OutputPath': "s3://aipa-hogehoge-fugafuga-train/output-data/" # トレーニングした後にモデルを出力するためのS3のパス }, "ResourceConfig": { 'InstanceType': 'ml.m4.xlarge', # インスタンスタイプ 'InstanceCount': 1, # 学習インスタンス台数 'VolumeSizeInGB': 10 # 学習インスタンスのボリューム }, "StoppingCondition": { 'MaxRuntimeInSeconds': 60 * 60 } } response = self.client.create_training_job(**training_params) print(response) if __name__ == '__main__': SagemakerClient().submit_training_job()
雑感
- 慣れたら多分すごい便利(環境構築とか何もいらん&Dockerでやるから確認は必要なんだけども)
- デバッグがめんどそう