Techブログ - MNTSQ, Ltd.

リーガルテック・カンパニー「MNTSQ(モンテスキュー)」のTechブログです。

ノイズが多いテキストを対象にした正規表現を書きやすくするPythonモジュール regex

MNTSQ(モンテスキュー)という契約書管理のSaaS製品を開発する会社で、 アルゴリズムエンジニアをしている坂本です。 契約書に書かれた情報を自動で抽出する仕組みを作っています。 概要 正規表現とはなにか 正規表現を書きにくい、中ボス的なテキストが存在…

MNTSQの検索周りの構成の変遷

MNTSQ(モンテスキュー)株式会社で検索エンジニアをやっている溝口です。 MNTSQはMNTSQ CLM(ちょっと前までMNTSQ for Enterprise)という数十万件を超えるような契約書を管理するプロダクトを提供しており、以下のような検索機能を提供しています。 https://sp…

突撃!隣の開発環境!! MNTSQ エディタ・ターミナルエミュレータ編

こんにちは、MNTSQ(モンテスキュー)でSREをやっている中原です。 前回(?)、 突撃!隣のPCデスク!! MNTSQ キーボード・マウス編というタイトルでブログを書かかせてもらいました。社内外から(特にエンターキーについて)大変反響をいただきうれしいな…

【実践】テックブログの締切をカッコよく先延ばしする方法

書き出し MNTSQ(モンテスキュー)株式会社でプロダクトマネージャーをしています、野中と申します。 この記事を読んでいる貴方様も、きっと同じIT業界の住人なのではないでしょうか。 さて、IT系の、しかも社員エンジニアの方々(いちおう私含む)が背負う…

差分指向テスト(DOT: Difference Oriented Testing)という考え方

はじめに MNTSQ(モンテスキュー)株式会社 フロントエンド担当の安積です。 入社して4ヶ月とちょっと。 コードに取り組もうと入社して、まさに日々格闘しております。 私の後ろの席にはこんなバズ記事書く人や、こんなイカつい記事書く人が座ってまして、そん…

neuralcorefによる共参照解析

はじめに 次の文章をまずは眺めてみてください。 “Chief Executive Tim Cook has jetted into China for talks with government officials as he seeks to clear up a pile of problems in the firm's biggest growth market. Cook is on his first trip to …

MNTSQ CLMの認可の実装

認証認可とワンセットで語られることが多い印象だが、今回話すのは「認可(Authorization)」の話だ。「認証(Authentication)」の話は含まない。 (システムで言う)認可とは、大雑把に言うと「誰が」「何を」「どうすることが」「できる/できない」の要素…

Ubuntu を業務PCで使いつづけて3年が経ちました。 〜Web開発にmacOSじゃなくて大丈夫なのか気になる方へ〜

MNTSQ(モンテスキュー)株式会社 ソフトウェアエンジニアの沼井です。 普段はRailsでのバックエンド開発をしつつ、Elasticsearchによる全文検索処理やインデクシングまわりの開発にも取り組んでいます。 私は現在、 Thinkpad X1 Carbon (2021年版)にUbuntu 20…

MNTSQのSlackに住まうbot - Hot Docs

新しい仲間 前回、MNTSQのSlackにいるいくつかのbotを紹介した。 tech.mntsq.co.jp 今日、そこに新しい仲間が加わったので紹介しよう。その名も "Hot Docs" だ。 Hot Docsとは Hot Docsとは、Google Driveのファイルを再帰的に探索し、短時間にたくさんコメ…

Ruby on Railsをかんたんスピードアップ

こんにちは、MNTSQでサーバーサイドエンジニアのようなものをやっている西村です。今回は比較的簡単にRuby on Railsのアプリを高速化する方法を書いてみようと思います。 内容的にはタイトルのとおり、平易なものが多いのですが、頻度高く見かけるものをまと…

突撃!隣のPCデスク!! MNTSQ キーボード・マウス編

こんにちは、MNTSQ(モンテスキュー)でSREをやっている中原です。しばらくコロナで帰省することができなかったのですが、つい最近久しぶりに帰るとともに、実家に放置してあった自分の車を関東に持ってきました。「これで夢のドライブライフだー!!」と思っ…

Document Analysisのオープンデータについて

はじめに テキスト情報から自然言語処理の機械学習モデルを構築する際には文字列データのみが解析の対象になりますが、文書全体から情報を抽出するモデルを構築する際には、文書レイアウト情報が重要になります。 通常の自然言語処理とは異なり、文書レイア…

MNTSQのSlackに住まうbotたち

いろいろなbot 組織をスケールさせる上でコーポレートエンジニアリングは非常に重要である。MNTSQではissue-drivenで誰でも気軽にbotを作ることができる。現在MNTSQのSlackにいるいくつかのbotを紹介しよう。 施錠と消灯を催促するbot 観葉植物の水やりを催…

【MNTSQxUbie】Vertical AI Startup Meetup を開催しました

こんにちは。MNTSQの堅山です。 去る8/10に、Ubieさんと共同で「Vertical AI Startup Meetup」というイベントを開催しました。 connpass.com 弊社MNTSQはいわゆるリーガルテックという領域で、企業法務に携わる方々を相手にプロダクトを提供しています。 Ubi…

structlogを用いた構造化ログの導入

Webアプリケーションやバッチジョブを運用していくにあたって、エラーの影響範囲の調査のため、APIへのアクセスIDやバッチのジョブIDのついたログは欠かせないです。 このような類のIDをログとして残す場合には、そのIDの影響下にある全部の処理に対して該当…

Pythonで省メモリに大量の文字列を扱う工夫

たくさんの文字列(や離散的な符号列)をメモリに載せないといけないんだけど、いろんな制約があって通常のList[str]では載らない…ということありませんか?(まぁあんまりなさそうですね) たまたまそういうことがあったので、その際に検討した内容をまとめ…

身近なデータで30時間クッキング:Slackのログを解析してみる編

入社して3ヶ月が経った。事業戦略・組織文化・プロダクトに対する解像度はだいぶ高まった実感があるが、実はまだメンバー1人1人のことを良く知らない。 そうだ、Slackのログを分析しよう。 当社では多くのコミュニケーションをSlackで行う。また、情報のopen…

公開されている日本の企業名辞書の紹介

特許・契約書・有価証券報告書・企業関連ニュースなど、実応用上の自然言語処理では、会社名を認識したいという場面に非常に多く出くわす。 会社名らしい文字列をテキストから抽出することは、形態素解析器の辞書を用いたり固有表現抽出モデルを学習すること…

社員の健康を支える技術

この記事では、Googleスプレッドシートで当番表を作り、Google Apps Scriptで当番をSlack通知する機能を実装する。 この記事は以下の記事の続編である。 未読の方は先に読んでおくことをお勧めしたいところだが、実はあまり関係が無い。 note.com 西村、サラ…

NFSについて復習してみた

背景 久しぶりにNFSを触るかもしれないということで、ちょっと素振りをしてみました。NFSを最後に触ったのは10年くらい前、まだあの頃は学生だったと思います。そんなわけで、久々なのであらためて、手順を頭に入れなおしてみました。 今回試す条件は緩いも…

UnifiedHighlighterのOffset strategyに関して調べてみた

MNTSQで検索エンジニアをしている溝口です。 今回はElasticsearchでハイライト処理を行う際に利用するUnifiedHighlighterの挙動について簡単に調べる機会があったので、それを簡単に記事にしました。 ハイライト処理とは 検索結果一覧が表示された際に、以下…

RailsでlazyにN+1回避したい

preloadはけっこう難しい mntsqのソフトウェアエンジニアチーム所属のhagiwaraです。 RailsアプリケーションのパフォーマンスチューニングとしてN+1問題を潰すというのはよく行われます。 教科書的には簡単に書けるのですが、現実のアプリケーション開発では…

pythonの依存関係解析ツール、pydepsを使う

はじめに 皆様はpythonで書かれたソフトウェアのリアーキテクティング1をどのように進めていますでしょうか? 既存のソフトウェアに新規機能が追加しにくいとか、機能が修正しにくい等の問題がある場合にリアーキテクティングは有効です。 リアーキテクティ…

ファイルシステムとS3でのユニコード正規化の関係を調べてみた2021

こんにちは、MNTSQでSREとして勤務している中原といいます。 プライベートも含めて、技術記事は久しぶりな気がします。がんばります。 さて、さっそくですが、日本人にとって、あるいは、韓国の方や中国の方も含めて、コンピュータ上でそれぞれの国の言葉を…

日本語でHugging Face Tokenizersを動かす

前回記事に続いてHugging Faceネタです。Transformers本体ではなく、分かち書きを行うTokenizersライブラリの紹介をします。 Hugging Faceが開発しているTransformersでは、事前学習モデルと用いた分かち書き処理を同梱して配布している。 機械学習モデルの…

身近なデータで30分クッキング:Google Meetのログを解析してみる編

最近、身近なスモールデータをさくっと分析してみる機会があったので、過程をまとめてみました。スモールデータの解析であっても、前処理、可視化、示唆出しなどデータ分析に必要な所作というのは変わりません。ステップに分けながら紹介したいと思います。 …

101回目のDocker入門

あなたはDockerに何回入門しただろうか? 何度あのクジラを見て頭を抱えたことだろうか? 今回あなたを「とりあえずDockerを使ってワールドプレスを表示する」ところまで道案内しようと思う。 そう、夢はでっかく世界に羽ばたかないとね。 間違えた、ワード…

ANTLRを使ってクエリパーサーを実装する

MNTSQの溝口です。 普段からMNTSQの検索周りの開発を行っています。 MNTSQを含め、情報検索を行うモダンなアプリケーションではシンプルなUIが好まれます。 一方で、複雑な検索条件などを指定したい場合、シンプルなUIでは実現が難しいという問題があります…

python3.8 から新しく導入された Literal types について

はじめに pythonの関数に与える引数として特定の値のみを許容したいときはないでしょうか? そのようなときに、動的に引数の値をチェックして範囲外のものを除外するアサーションや、Enumを用いてとりうる値を絞ることが考えられます。 ですが、前者は動的な…

Transformersを用いた固有表現抽出のtips

TL;DR TransformersのNERではFast Tokenizerを使うことで、サブトークン ↔ ラベルのアラインメントが実装できる。 長いテキスト入力については、無駄なpaddingを最小限にとどめて高速処理するために、入力を固定長分割するのが良い。 検出漏れが問題になるよ…