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.
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.
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”:
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
The application service layer was built by the developers I managed; it isn’t claimed here.
3 · Inside the product






Responsive: two sample screens
The whole product is responsive; these two are just a sample of how it behaves on a phone.
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.

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