Jiwoo Shim

Case study

FinSent: turning a research NLP model into a working fintech product

In short

Analysts were reading hundred-page filings by hand. I built the data architecture that let a research language model read them instead, across three markets.

I owned the ingestion pipeline and the three-schema database design behind FinSent, and ran delivery over the build team. It reached a deployed, working product on the university’s domain.

RoleProject manager · data & database architecture
OrgHKUST · Center for Business & Social Analytics
Timelinethrough 2024
ScopeThree markets · two document types

1 · The problem

Ten analysts, every morning, counting words

Before building, we interviewed three practitioners: a former asset-management trader, a family-office principal, and a derivatives trader. They described the same bottleneck. Either they read hundred-page filings by hand, or they waded through a large volume of shorter texts.

One team of seven to ten analysts met for thirty minutes every morning before the open. To decide what was worth discussing, they filtered reports against a keyword list built up over decades, where a term appearing twenty times in a five-hundred-word report counted as significant. The sentiment itself came from the analysts’ own reading.

They also told us where the attention actually goes: management commentary and guidance, the MD&A section, and for ESG the governance detail that is hardest to get reliably. That is what FinSent aimed at.

What it is

FinSent is a financial-sentiment platform. It runs FinBERT, a financial-domain language model from our research group, over two kinds of text, earnings-call transcripts and corporate filings, and turns them into sentence-level sentiment and ESG signals. A dashboard lets you compare companies and whole industries over time, alongside stock returns and keyword trends.

My job wasn’t to train the model. It was to build everything that makes a model usable: pull raw data from a handful of vendors, clean and structure it, run the model over it, and stand up the application and database layer behind the product.

A single-company report: drill into one name’s sentiment and signals, every figure tracing back to the sentences underneath.

2 · The architecture

Three markets, made comparable

The hard part was never the model. It was the data. Three markets (the US, Hong Kong and mainland China) and two document types, MD&A sections from corporate filings and earnings-call transcripts, drawn from sources including SEC EDGAR, HKEX, CNINFO, Refinitiv, Compustat and Datastream. Each market has its own filing regime, its own fiscal-calendar conventions, its own company identifiers, and its own language.

I split the database into three schemas so ingestion, analysis and the application never stepped on each other: a raw layer that keeps each feed close to the shape it arrived in; a core layer where the three markets are reconciled into one company identity, one document model and one time axis, and where FinBERT’s sentence-level sentiment and the ESG classification are stored; and an application layer for users, subscriptions, watchlists and access control. The point of the middle layer is that nothing downstream has to know which market a document came from.

How the analysis works

Every document is split into sentences, and each sentence is classified twice: once for sentiment and once for ESG. A company or industry score is then the percentage breakdown across those labelled sentences, so a figure on the dashboard always traces back to the sentences underneath it.

ESG, at two granularities

Three headline classes (environmental, social, governance) plus a nine-class breakdown, so a sentence can be placed precisely rather than just labelled “ESG”:

Climate changeNatural capitalPollution & wasteHuman capitalProduct liabilityCommunity relationsCorporate governanceBusiness ethics & valuesNon-ESG

From proof of concept to production

The first proof of concept ran on MongoDB, which was quick to get moving while the shape of the data was still changing. For the production demo I moved it to MySQL. At this scale a relational schema was faster and easier to maintain, and it will not let you store a malformed structure the way a document store will. For a system whose entire value is trustworthy, structured financial data, that guarantee was worth the rebuild.

What I worked in

FinBERTPythonMySQL 8MongoDBDockerRESTful API

The application service layer was built by the developers I managed; it isn’t claimed here.

3 · Inside the product

The FinSent landing page
The landing page, the public front door.
The dashboard home: watchlists and sentiment at a glance.
Compare view: sentiment over time for selected companies and an industry, with returns, keyword frequency and a pos/neg/neutral breakdown.
A single-company report. Drill into one name's sentiment and signals.
Sentiment detail for one company.
Sentiment detail for one company.
ESG detail: the 3-class and 9-class breakdown surfaced for one company.
ESG detail: the 3-class and 9-class breakdown surfaced for one company.
The reports index.
The reports index.
Adding a company to a watchlist, a small interaction that shows it's a real app and not a mockup.
Hong Kong market: a company page built from HKEX disclosures.
Hong Kong market: a company page built from HKEX disclosures.
Mainland China market: a different market entirely, with its own filing regime. The report is in Chinese because the company files in Chinese.
Mainland China market: a different market entirely, with its own filing regime. The report is in Chinese because the company files in Chinese.

Responsive: two sample screens

The whole product is responsive; these two are just a sample of how it behaves on a phone.

Home.
Report.

4 · What I owned

  • Designed the three-schema database architecture and the data model end to end.
  • Built the ingestion pipeline across three markets and two document types into clean, model-ready tables.
  • Ran FinBERT sentiment and ESG classification into the analytical layer behind the dashboard.
  • Ran delivery as project manager over the build team (a frontend developer, a backend developer, and a UI/UX designer), and set the architecture the build followed.

Shown at HKUST

FinSent was presented at the HKUST Office of Knowledge Transfer showcase.

Jiwoo Shim with Prof. Allen Huang at the HKUST Office of Knowledge Transfer showcase, beside the FinSent exhibition board
FinSent at the HKUST Office of Knowledge Transfer showcase, with Prof. Allen Huang, the principal investigator.

FinBERT was the research group’s model. I productized it, I didn’t train it. I owned this through 2024.

← All writing