京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

【特集】AIプログラミング学習サービス、無料講座 & 無料カウンセリング受講

今後、日本で深刻化するAI人材不足

年々、人工知能技術が扱える技術者、つまりはAI人材不足が深刻になってきています。6割以上の日本企業で「AI導入が諸外国に比べて遅れている」と指摘されています。

ある調査会社のレポートによると、上場企業の半数以上がAIを導入済または今後導入予定という方向性を打ち出しています。一方、AI導入に関する喫緊の課題として、「AIの導入をリードできる人財がいない」が33%「AIを扱える人財がいない」が30.9%と、AI人材が圧倒的に不足している実態が次々と明らかになっています

また、その調査報告では、7割近くの日本企業が「日本のAI導入は世界から遅れている」と実際に認識しているとのことでした。つまりは、今後もAI人材の需要は大きくなることが期待されます。

AIプログラミングの要「Python」の人気が止まらない!!

「Python(パイソン)」は、AI人気とともに、世界で2番目に人気のある言語へと発展してきています。

ある調査会社が公開した最新のプログラミング言語人気ランキングでは、Pythonが2位にランクアップされています。

これは、誰しもが予期しなかった驚くべきことで、 JavaScriptやJava以外の言語がトップ2にランクインしたのはランキングを開始した2012年以降、初めてとなります。

保有スキルランキングで人気上昇中、Pythonエンジニアの平均年収は?

現状のPythonエンジニアの平均年収は624万円(約52万円/月となる)です。

「2020年プログラミング言語別/年代別の平均年収ランキング調査」によると、 Pythonエンジニアの世代別平均年収は20代で403万円、30代で546万円、40代で624万円となっています。

また、ITエンジニアが保有しているスキルランキングで、Python言語は2019年の10位から6位へ上昇しています。IT業界でも非常に注目されているスキルであることがわかります。

このような昨今の状況から、AI開発に使われ、多くの科学者や数学者がデータ処理言語として好む万能言語「Python」の動向は今後も目が離せなくなりそうです。

いま、AI開発に万能な言語である、Python言語が無料で学べる、オンラインスクールが人気になっています。

以下に、いくつかの無料講座や無料カウンセリングがある、オンラインスクールを紹介します。ぜひ、この機会にご検討してみてください。

無料講座や無料カウンセリング

初心者からAIエンジニアへ!オンラインAIプログラミングスクール Aidemy Premium

AIや機械学習などの最先端技術の習得にとどまらず、 それらを活用して目標達成を実現するまでを一気通貫して支援するオンラインコーチングサービスです。

AIを活用して実現したい目標とは、例えば:

AIエンジニア/データサイエンティストにキャリアチェンジしたい

業務課題 (研究課題) をAIを使って解決したい

AIに関してのスキルを身に着け就職活動に活かしたい

■サービス特徴

・3ヶ月間集中して「AIプログラミング」を習得するオンラインコーチングサービスです

・完全なプログラミング初心者から研究者にまで対応した幅広く優良なコンテンツを提供します

・通常のプログラミングスクールとは異なり、受講者の進捗管理を徹底して行います

・弊社専属のメンターがAIの学び方から徹底的にコーチングします

・完全オンライン完結なので、東京以外に在住・在勤の方も気兼ねなくお申し込みいただけます

テックジム|ゼロからはじめるPython入門講座(無料)

Pythonプログラミングの無料講座

高速学習・無料・初日にして関数が書けるようになります。

AIBoost|python特化型オンラインスクールの無料カウンセリング

プログラミング未経験者が短期間でAI人材になるためのコースを展開しています。

  • AIエンジニアコース:python基礎から学習し機械学習を用いたWebアプリの開発をおこないます。

  • データサイエンスコース:python基礎から統計学や分析までを学習し、データサイエンティストになるための素養を身につけます。

ランサーズデジタルアカデミー|最先端デジタルスキル教育サービスの無料カウンセリング

ランサーズが母体ということもあり、「学びの出口として仕事につながる」ことをコンセプトにしています。

  • 受講生ごとに専任の仕事コンシェルジュが付く、仕事獲得サポートがあります。

  • ランサーズで多くの案件を扱っている案件データをもとに、需要が拡大中のスキルを学べます。

  • 卒業するとランサーズプロフィールやSNSでも使えるデジタルバッジが付与され、個人ブランディングになります。

  • 業界トップレベルの企業のエース級社員のスキルやノウハウを体系的に教材にしているので、高度なスキルが身に付きます。

  • 1日10分からの学習で、仕事と両立しながら学習できます。

  • バーチャル教室を使うため、オンラインでどこからでも参加できます。(VRではなく、ブラウザで動く2Dのメタバースです)

  • 教材はモーショングラフィックスを多用した動画教材です。動画教材としてありがちなスライドショー動画ではないので、普通はわかりにくい内容でも、直観的に理解することができます。

Freeks(フリークス)|月額10,780円のサブスク型プログラミングスクールの無料説明会申込み

オンライン、オフラインでも学べるサブスクリプション型プログラミングスクール

  • JAVA、 PHP、JavaScript、Pythonなどのカリキュラムが全部受講可能でわからないことは質問し放題!

  • 副業紹介サービス開始

  • 勉強会、模擬プロジェクトの参加が追加料金なしで受けることが可能

  • 就職/転職やキャリアについての相談、サポートが無料で受けることができます

  • 現場経験3年以上の現役エンジニアが対応

  • 毎週の個別面談を実施し、個人個人の今後のキャリアプランや学習の進行をサポートさせていただきます。

  • 技術力を身に着けたあとは、約300社にのぼる業務提携先や、システム開発を行っているクライアント様への転職をサポートする制度あり

CODEGYM エンジニア転職|日本初の「出世払い」を取り入れた少人数制プログラミングスクール

CODEGYM エンジニア転職は活躍できるエンジニアを育成するために、国内トップクラスの学習時間で徹底的に受講生を鍛え抜く、自分を追い込めるオンライン型のプログラミングスクールです。

カリキュラムの難易度は高いですが、その分、少人数制の密度の濃い管理指導型スクールなので、 挫折率は低く、就職活動の内定獲得率は非常に高く、採用企業様からも高い評価をいただいています。

Shopify専門のプログラミングスクール

Web系のオンラインスクールには、Web制作スクール、 プログラミングスクール、Webデザインスクールなど多くのスクールがあります。

一方で、Shopify独自の開発仕様LiquidやShema、 Shopify CLIなどの構築ノウハウを教えるスクールはほとんどありません。 テックアカデミーが講座を開いていますが、今のところその一社です。

テックギークの強みは、実際にShopifyで月収100万円を稼いだエンジニアがカリキュラムを作り、 実案件から学んだ構築ノウハウを教えることです!

プログラミングスクール【DIVE INTO CODE】Webエンジニアフルタイム 無料説明会&相談会

年齢や学歴、経歴問わず、
「実践力をつけて活躍するエンジニアになれる」
 
 未経験から実践的な力をつけて、就職後に活躍できるキャリアを積める。
 
 実際に、実務歴2-3年が必要とされる求人票で内定を得ています。

SAMURAI TERAKOYA|オンラインプログラミング学習サービス(侍エンジニア)

特徴(1) 教材と課題:自走力を鍛えられる40種類以上の「教材」と「課題」

特徴(2) Q&A掲示板:つまづいたらいつでも相談できる「Q&A掲示板」

特徴(3) 学習ログ:プログラミング学習を継続できる「学習ログ」と「仲間」

特徴(4) 単発レッスン:言語化できない「悩み」も月1回〜のオンラインレッスンで解決

特徴(5) 月額定額制:継続しやすい安価な月額定額制

参考情報

人工知能の関連記事

skume.net

skume.net

skume.net

データサイエンスを活用したビジネス戦略・データコンサルの厳選書籍

はじめに

データサイエンスを活用したビジネス戦略・データコンサルを考えるときに、 データを活用したロジカルシンキング・問題解決を 考える上で参考になる書籍を厳選してみました。

データサイエンスを活用したビジネス戦略本、データコンサル本を探している人はぜひ参考にしてみてください。

データサイエンス・データコンサルのおすすめ書籍

イシューからはじめよ ― 知的生産の「シンプルな本質」


イシューからはじめよ ― 知的生産の「シンプルな本質」は、 安宅和人 氏の代表作の1つであり、ロジカルシンキング・問題解決を考える上での決定版である。 発売10年があったいまでも色褪せることがなく、支持され続ける名著であり、これからのAI×データ時代の必携書である。

人生には限りがある、知識生産性は最大化して、時間あたりの効果性を引き上げていく必要があります。

イシュ―度の高い問題のみに着手すべきであって、 実現性、解決できる問題から着手すべきではない。

経営戦略、マーケティングをめざす方には是非読んでもらいたい本です。

シン・ニホン AI×データ時代における日本の再生と人材育成


シン・ニホン AI×データ時代における日本の再生と人材育成は、 ビジネス書大賞2020 特別賞(ソーシャルデザイン部門)など、数々の賞を受賞している、安宅氏の著書である。

これからの時代の生き方の教養書今後の日本が進むべき道を豊富なデータと精緻なロジックに概説新人教育やマネジメント教育・ビジネスパーソンの必読本『未来をつくる人』をどう育てるかについて、 著者の豊富な経験や知識が崇高に盛り込まれた会心の一冊である。

日本はオワコンなのだが勝てる、現状の悲観論を払拭してくれる切れ味鋭い一冊です。

マーケティングリサーチとデータ分析の基本


マーケティングリサーチとデータ分析の基本は、 「身近なデータを、シンプルに活用する技術」に焦点をあて、 文系出身のどちらかと言えば数字が苦手な方や、リサーチやデータ分析が苦手なビジネスパーソン向けに、 「とりあえずこれだけ押えておけば大丈夫」というリサーチ・データ分析のポイントをシンプルに提供している一冊となっています。

マーケティングリサーチの入門書として、 リサーチの始め方や、データ分析の基本的な考え方、 そしてニューロリサーチなどといった振り返り方法なども含めて、 リサーチの基本やビジネスでの活用シーンを広く学ぶことができます。

コンサル一年目が学ぶこと

本書は、ベテラン社員が新人時代を思い出し、 一過性のものではなく、15年、20年と、普遍的に役立つスキルを身につけてもらいたいと、執筆した1冊です。

何を学ぶのか。その点について、シンプルにかつ簡潔に、わかりやすく、要点を示しています。

ダラダラ結論を出さない会議、ホワイトカラーの生産性が低さ、外資IT企業でも通用する必要なスキルなど、新人や若手の社会人なら読んでいて損はしない内容です。

まとめ

2022年7月版の「データサイエンスを活用したビジネス企画・データコンサルの書籍」について解説しました。

データサイエンスのビジネス活用はこれからも益々注目されていくところで、引き続きウォッチしていきたいですね。 今後、どのような展開を見せてくるのか楽しみです。

R環境で小説のテキストマイニングをやってみたら、○○○な結末になった件【その3: 形態素解析と複合語抽出 (名詞、接頭辞、接尾辞の品詞ルールベース抽出、pytermextract)】

はじめに: 『R環境で小説のテキストマイニング』の連載シリーズです。

テキストマイニングは、テキストデータを定量的に扱って、有益な情報を抽出するデータマイニング手法の1つです。 このようなテキストの情報解析では、自然言語処理、形態素解析、キーワード抽出、共起分析、ネットワーク可視化、機械学習、感情分析など、様々な分析手法が用いられます。 近年では各種のAPIやWebスクレイピングなどを利用して、ウェブやSNS、地図上のクチコミからテキストデータを取得して、テキストマイニングに活用されています。

この記事は、夏目漱石の「坊っちゃん」が対象小説で、 形態素解析と品詞のルールベースの複合語抽出、pytermextractによる複合語抽出を扱った内容となっています。

連載シリーズの目次

1. 青空文庫、対象小説の紹介
2. 「坊っちゃん」のテキストの前処理
3. 形態素解析と辞書設定
4. 形態素解析と複合語抽出 (ルールベース抽出、pytermextract)
5. テキストマイニングと形態素のワードクラウド
6. テキストマイニングとN-gramのネットワーク表現(章ごとの関係性とか)
7. テキストマイニングと単語の埋め込み生成(word2vecとか)
8. 文章の感情分析(感情ポジネガ分析とか、英語感情対応表とか、ML-askとか)
9. ミクロとマクロなテキスト解析〜応用篇として内容を考え中〜


「4. 形態素解析と複合語抽出 (ルールベース抽出、pytermextract)」に関する内容をやっていきます。

実行環境

#ターミナル上のR環境
R version 4.1.2 (2021-11-01) -- "Bird Hippie"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: aarch64-apple-darwin20.6.0 (64-bit)

#RStudioターミナル上のR環境
R version 4.1.2 (2021-11-01) -- "Bird Hippie"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-apple-darwin17.0 (64-bit)

M1 MacだとRStudioでRMeCabパッケージがうまく動作せず、 引き続き、形態素解析の結果はターミナルからRを実行して得た結果(result1.Rds)を使っています。

名詞、接頭辞、接尾辞をくっつける、品詞のルールベースの複合語抽出

RMeCabで形態素解析をすると、 形態素とともに、それに対応する品詞情報が出力されます。 この品詞情報をもとに、ルールベースで品詞、つまりは対応する形態素をくっつけて、 複合語を抽出します。

この複合語抽出プログラムでは、ある特定の品詞が出現した時に、 その品詞をルールベースでくっつけていくというものです。

例えば、RMeCabの出力で見られる品詞の場合では、 名詞、接頭詞、あるいは接尾詞が連続する箇所を見つけて、 それらの形態素を結合させて、複合語を生成します。 その後、複合語かどうか判定して*1、 複合語として抽出するものです。

今回、品詞ルールベースの複合語抽出関数をR言語で実装して、 Compound_calcという自作関数を用意しました。 RコードをGitHubからソースして、形態素解析の結果を入力して実行します。

##形態素解析の結果(result1.Rds)をR環境にロードする
Rds_path_all <- "https://github.com/kumeS/Blog/raw/master/R_text_analysis/R_02/result1.Rds"
download.file(url=Rds_path_all, destfile = basename(Rds_path_all))
result1 <- readRDS(file = "result1.Rds")

#ヘッド表示
head(result1)
#  parts    mor
#1  名詞 親譲り
#2  助詞     の
#3  名詞 無鉄砲
#4  助詞     で
#5  名詞   小供
#6  助詞     の

#複合語抽出: Compound_calc()関数を使います
source("https://raw.githubusercontent.com/kumeS/Blog/master/R_text_analysis/R_03/Compound_calc.R")
#実行
result2 <- Compound_calc(result = result1)

#結果カウント: 137個の複合語が抽出できました
sum(result2$parts == "複合語")
#[1] 137

#結果表示
head(result2[result2$parts == "複合語",], n=20)
#     parts        mor
#18  複合語   時分学校
#89  複合語       ーい
#115 複合語       二階
#150 複合語     西洋製
#238 複合語   幸ナイフ
#274 複合語     二十歩
#280 複合語   南上がり
#296 複合語       一本
#342 複合語     庭続き
#350 複合語     十三四
#368 複合語   四つ目垣
#381 複合語   夕方折戸
#397 複合語   時勘太郎
#549 複合語   四つ目垣
#579 複合語       片袖
#594 複合語       晩母
#606 複合語       片袖
#614 複合語 外いたずら
#622 複合語       兼公
#633 複合語     人参畠

結果として、Compound_calc()関数で、137個の複合語が抽出できました。

多いと思うのか少ないと思うのかは、貴方次第です。。。

pytermextractを使った複合語抽出

ターミナル環境上での、pytermextractを使った複合語抽出

Pythonライブラリである、termextractは、テキストデータから専門用語を取り出すツールです。 termextractの特徴は、複合語からなる専門用語を抽出できることで、用語は重要度でランキングされます。重要度の低い用語も抽出されますが、それらはノイズとなる可能性が高くなります。

まずは、ターミナルを起動して、pytermextractとかjanomeとかをセットアップします。

#pytermextractのダウンロード・解凍
mkdir pytermextract
cd pytermextract
wget http://gensen.dl.itc.u-tokyo.ac.jp/soft/pytermextract-0_02.zip
unzip pytermextract-0_02.zip

#pytermextractのセットアップ
pip3 install . 
#...
#Successfully installed termextract-0.12b0

#janomeのインストール
pip3 install janome
#...
#Successfully installed janome-0.4.2

次に、テスト実行(1)として、 janome(日本語形態素解析器)の和文解析結果をもとに、 複合語・専門用語の抽出を試みてみます。 入力ファイルとしては、termextractのtest_data内のテキストファイルを使っています。

#テスト実行(1)
#janome(日本語形態素解析器)の和文解析結果をもとに、専門用語を抽出する
python3 ./pytermex/termex_janome.py ./test_data/jpn_sample.txt

#結果表示
head janome_extracted.txt
#人工知能        477.401125619928
#AI      117.77945491468365
#知能    108.83014288330233
#人間    32.526911934581186
#研究    23.237900077244504
#システム        22.360679774997898
#計算知能        19.934680700343144
#エキスパートシステム    16.548754598234364
#人工知能学会    13.456666729201407
#手法    12.727922061357857

次の実行例は、MeCabの和文解析結果をもとに、専門用語を抽出する例となります。

#Python版MeCabのインストール
pip3 install mecab
#...
#Successfully installed mecab-0.996.3

#入力ファイル
head ./test_data/mecab_out_sample.txt
#人工    名詞,一般,*,*,*,*,人工,ジンコウ,ジンコー
#知能    名詞,一般,*,*,*,*,知能,チノウ,チノー
#EOS

#テスト実行(2)
#MeCabの和文解析結果をもとに、専門用語を抽出する
python3 ./pytermex/termex_mecab.py ./test_data/mecab_out_sample.txt

#結果表示
head mecab_extracted.txt
#janomeの結果とほぼ同じなので省略

R環境上での、pytermextractを使った複合語抽出

R環境からpytermextractパッケージを使う場合には色々な方法がありますが、 手っ取り早いと思われる、 system()関数を介して上記のpythonコマンドを実行する方法を紹介します。

実際に、コマンド実行する際の注意点としては、 Pythonのパスはフルパスを指定することです。 例えば、homebrewのフルパスなら、 /opt/homebrew/bin/python3とかで記述してください。 相対パスにすると、何故かコケます。

R環境での、pytermextractの実行例と結果の読み込みについては、以下に示します。 pyファイルと入力テキストを作業ディレクトリに置いて、system()関数からpythonを実行します。

#termex_janome.pyのダウンロード
file_path1 <- "https://raw.githubusercontent.com/kumeS/Blog/master/R_text_analysis/R_03/termex_janome.py"
download.file(url=file_path1, destfile=basename(file_path1))

#「坊ちゃん」の全テキストのダウンロード
file_path2 <- "https://raw.githubusercontent.com/kumeS/Blog/master/R_text_analysis/R_01/Bochan_text.all.txt"
download.file(url=file_path2, destfile=basename(file_path2))
 
#system関数で、Python3実行: janome_extracted.txtに結果が出力されます
system(paste0("/opt/homebrew/bin/python3 ", 
              basename(file_path1), " ", basename(file_path2)))

#結果の読み込み
Comp <- read.table("janome_extracted.txt", sep="\t", header=F)

#結果表示
head(Comp, n=20)

#         V1         V2
#1  赤シャツ 4388.31843
#2        清  444.48622
#3        人  364.00000
#4      学校  273.66403
#5      生徒  249.41532
#6      校長  235.72442
#7        野  219.59736
#8      山嵐  217.78889
#9      先生  203.64675
#10     教師  152.73506
#11     下宿  143.30038
#12       気  129.69194
#13       顔  108.89444
#14       目  104.57055
#15     自分   93.53074
#16       手   93.33810
#17     東京   93.33810
#18 江戸っ子   91.65151
#19     田舎   87.63561
#20     通り   84.24963

pytermextractは、専門用語の文章だと、 複合語・専門用語の抽出が上手くいってそうだったけども、 小説の文章だと、「う〜〜ん、この一語って複合語なのか?」 という出力結果が多い印象ですね。

推測ですが、小説の語彙構成だと、 決まった複合語の頻度が明らかに専門文書よりも少ないと考えられる。 pytermextractだと、うまく複合語が抽出されないのかもですね。

小説の場合だと、 品詞のルールベースで複合語を抽出するのも捨てたもんじゃないですね。 また、RMeCabのデフォルト辞書では無く、neologd辞書の結果を利用しているのも影響大かもしれないけども。

まとめ

今回のトピックは、複合語抽出(いわゆる、専門用語の抽出)でした。

日本語の複合語の判定と抽出は、面白くもあり、難題なテーマですね。

まぁ、形態素解析用の辞書が時代や分野に合わせて、常に充実していたら*2、特段複合語抽出も問題にはならないのですが。それは、理想郷ですよね。

補足

テキスト処理の関連記事

skume.net

skume.net

skume.net

skume.net

skume.net

skume.net

R Script - Compound_calc()

Compound_calc()は、RMeCabでの形態素解析結果のデータフレームを入力として、 品詞ルールベースで複合語を抽出するプログラムです。

Compound_calc <- function(result){
  
if(!any(colnames(result1) == c("parts", "mor"))){
 stop("not proper column name") 
}

result$id1 <- 1:nrow(result)
result$id2 <- NA
result$parts1 <- NA
result$mor1 <- NA

x <- 1
for(n in 1:nrow(result)){
  #n <- 3
  a <- result[n,1] %in% c("名詞", "接頭詞", "接尾詞")
  if(a){
  if(n > 1){
    if(result[n-1,1] %in% c("名詞", "接頭詞", "接尾詞")){
      result[n,4] <- x
    }else{
      x <- x + 1
      result[n,4] <- x
    }
  }else{
    result[n,4] <- x
  }
  }else{
    x <- x + 1
    result[n,4] <- x
  }
}

#head(result)
if(n == nrow(result)){
    for(m in 1:max(result$id2)){
    #m <- 18
      b <- result$mor[result$id2 == m]
      b1 <- paste0(b, collapse = "")
      d <- result$id1[result$id2 == m][1]
      
      if(length(b) == 1){
        result$parts1[d] <- result$parts[d]
        result$mor1[d] <- b1
      }else{
        result$parts1[d] <- "複合語"
        result$mor1[d] <- b1
      }
    }
}

result2 <- na.omit(result[,c("parts1", "mor1")])
colnames(result2) <- c("parts", "mor")
return(data.frame(result2, row.names = 1:nrow(result2)))
}

*1:実際は判定はしないかもですが、、

*2:著者願望