Compare commits
81 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c55eba2077 | |||
| 2403a20ed0 | |||
| 7eb507d3c3 | |||
| 7cafa11a83 | |||
| 8faee98ec6 | |||
| 4c6441182b | |||
| 828f8a9231 | |||
| 9321539ee7 | |||
| 238131525a | |||
| a73881a28e | |||
| 790db8bb40 | |||
| 83b5db4860 | |||
| ec64a0b5f1 | |||
| 04c3486b83 | |||
| 4653ef3459 | |||
| 2c8c5cf589 | |||
| eded50a667 | |||
| 4eac2ae88d | |||
| b2c76c78c1 | |||
| 37b51428fb | |||
| 386b1affeb | |||
| b5a69fea67 | |||
| 08a40bfaaf | |||
| 35d400a9ed | |||
| 7d3fcc0705 | |||
| 3a1c3d40de | |||
| 2f750c2478 | |||
| 955f0ceacc | |||
| ce84719acb | |||
| 682812e016 | |||
| 49968691cc | |||
| 83e111f088 | |||
| 807bf46a99 | |||
| 3b0dd85670 | |||
| e717234f66 | |||
| 58286f6f1c | |||
| f382390291 | |||
| a549f3e131 | |||
| 69f2f6dc2f | |||
| 573ada2d63 | |||
| 5a143b4026 | |||
| 71a0022ac7 | |||
| 6bed8c365c | |||
| a8fa8fd11c | |||
| 8ab5de6b19 | |||
| fc251281a8 | |||
| a86da4112a | |||
| f8db199996 | |||
| 2ad06e8b38 | |||
| 55f1599a7a | |||
| 18c6ba62bb | |||
| 2b7188b1b8 | |||
| 4d55499548 | |||
| 85d079fab8 | |||
| 10b41aadac | |||
| c26104532b | |||
| 1c73ac03e4 | |||
| e8b07b4f5a | |||
| e881bfbfbe | |||
| 871e4ec866 | |||
| b902e46f63 | |||
| 43b4b5478b | |||
| 4f97884032 | |||
| d8a8d52bc5 | |||
| ae217490aa | |||
| d0c5f5b2a4 | |||
| f7c82ed0fe | |||
| adcd300fa4 | |||
| 50531d60ea | |||
| a035caec4f | |||
| 0dd5b6e8f4 | |||
| eb143917be | |||
| 8cd3449cff | |||
| f1a1de5469 | |||
| 4b919ee757 | |||
| 9999b7ef29 | |||
| 1f08f94684 | |||
| aa31d2bb0a | |||
| aa548f0074 | |||
| 4debf1cf93 | |||
| 2d35bb1f70 |
57
.forgejo/workflows/docker.yml
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
name: Publish on DockerHub
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['*']
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# The `docker` runner image is node-based and may not ship the docker CLI
|
||||
# that the docker/* actions below drive; install it idempotently, as the
|
||||
# sibling repos do for their Docker jobs.
|
||||
- name: Ensure Docker CLI
|
||||
run: |
|
||||
set -eux
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
ARCH=$(uname -m)
|
||||
curl -fsSL --retry 3 --retry-connrefused \
|
||||
"https://download.docker.com/linux/static/stable/${ARCH}/docker-27.5.1.tgz" \
|
||||
| tar xz --strip-components=1 -C /usr/local/bin docker/docker
|
||||
fi
|
||||
docker --version
|
||||
|
||||
# Marketplace actions must be referenced by full URL: this instance's
|
||||
# DEFAULT_ACTIONS_URL points at code.forgejo.org, so only bare `actions/*`
|
||||
# names resolve to GitHub automatically.
|
||||
- name: Set up QEMU
|
||||
uses: https://github.com/docker/setup-qemu-action@v3
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: https://github.com/docker/setup-buildx-action@v3
|
||||
|
||||
- name: Log in to Docker Hub
|
||||
uses: https://github.com/docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Extract metadata for the Docker image
|
||||
id: meta
|
||||
uses: https://github.com/docker/metadata-action@v5
|
||||
with:
|
||||
images: schmelczera/great-ai
|
||||
|
||||
- name: Build and push
|
||||
uses: https://github.com/docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
52
.forgejo/workflows/docs.yml
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
name: Publish documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'great_ai/**'
|
||||
- 'mkdocs.yaml'
|
||||
- '.forgejo/workflows/docs.yml'
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: pages
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
# The mkdocs git-revision-date plugin reads each page's git history.
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Set up Python
|
||||
run: uv python install 3.10
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
uv venv --python 3.10
|
||||
uv pip install '.[dev]'
|
||||
|
||||
- name: Build documentation
|
||||
run: |
|
||||
. .venv/bin/activate
|
||||
mkdocs build
|
||||
|
||||
# The old workflow ran `mkdocs gh-deploy` (GitHub Pages); on this instance
|
||||
# built sites are rsynced into the host /pages mount that nginx serves,
|
||||
# via the shared ci-actions/deploy-pages action — same as photos/reconcile.
|
||||
- name: Deploy to pages mount
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: http://forgejo:3000/andras/ci-actions/deploy-pages@main
|
||||
with:
|
||||
source: site
|
||||
target: great-ai
|
||||
28
.forgejo/workflows/publish.yml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
name: Publish on PyPI
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: ['*']
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Set up Python
|
||||
run: uv python install 3.10
|
||||
|
||||
# Forgejo cannot use PyPI trusted publishing (OIDC), so authenticate with
|
||||
# an API token, the same way the sibling repos publish their packages.
|
||||
- name: Build and publish
|
||||
env:
|
||||
FLIT_USERNAME: __token__
|
||||
FLIT_PASSWORD: ${{ secrets.PYPI_TOKEN }}
|
||||
run: uvx flit publish
|
||||
73
.forgejo/workflows/test.yml
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
name: Check
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, dev]
|
||||
pull_request:
|
||||
branches: [main, dev]
|
||||
workflow_dispatch:
|
||||
|
||||
concurrency:
|
||||
group: ${{ gitea.workflow }}-${{ gitea.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
name: Lint, format & type checks
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Set up Python
|
||||
run: uv python install 3.10
|
||||
|
||||
- name: Install dependencies
|
||||
# --seed gives the venv its own pip, which scripts/check-python.sh shells
|
||||
# out to for its linters; '.[dev]' provides the rest (mypy resolves the
|
||||
# package's own imports against the installed tree).
|
||||
run: |
|
||||
uv venv --seed --python 3.10
|
||||
uv pip install '.[dev]'
|
||||
|
||||
- name: Check code and formatting
|
||||
run: |
|
||||
. .venv/bin/activate
|
||||
scripts/check-python.sh great_ai tests
|
||||
|
||||
test:
|
||||
name: Test on Python ${{ matrix.python-version }}
|
||||
runs-on: docker
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
# pyproject declares >= 3.7, but uv's standalone CPython and the current
|
||||
# dependency floors (scikit-learn/numpy now require >= 3.9) no longer
|
||||
# build on the older interpreters, so we test the current supported set.
|
||||
# The windows leg of the old GitHub matrix is dropped: this Forgejo
|
||||
# instance only has a Linux `docker` runner.
|
||||
python-version: ['3.10', '3.11', '3.12', '3.13']
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Install uv
|
||||
run: |
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
|
||||
|
||||
- name: Set up Python ${{ matrix.python-version }}
|
||||
run: uv python install ${{ matrix.python-version }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
uv venv --python ${{ matrix.python-version }}
|
||||
uv pip install '.[dev]'
|
||||
|
||||
- name: Run tests
|
||||
run: |
|
||||
. .venv/bin/activate
|
||||
pytest --doctest-modules --asyncio-mode=strict
|
||||
6
.github/dependabot.yml
vendored
|
|
@ -1,6 +0,0 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
36
.github/workflows/codeql-analysis.yml
vendored
|
|
@ -1,36 +0,0 @@
|
|||
name: analyse with CodeQL
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ "main" ]
|
||||
schedule:
|
||||
- cron: '45 13 * * 5'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'python' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
39
.github/workflows/docker.yaml
vendored
|
|
@ -1,39 +0,0 @@
|
|||
name: publish on DockerHub
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
|
||||
- name: Log in to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Extract metadata for the Docker image
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
with:
|
||||
images: schmelczera/great-ai
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@v3
|
||||
with:
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: linux/amd64,linux/arm64
|
||||
27
.github/workflows/docs.yaml
vendored
|
|
@ -1,27 +0,0 @@
|
|||
name: publish documentation
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.9
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install --upgrade './[dev]'
|
||||
|
||||
- name: Build documentation
|
||||
run: mkdocs gh-deploy
|
||||
26
.github/workflows/publish.yaml
vendored
|
|
@ -1,26 +0,0 @@
|
|||
name: publish on PyPI
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- '*'
|
||||
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.9
|
||||
|
||||
- name: Install Flit
|
||||
run: pip install --upgrade flit --user
|
||||
|
||||
- name: Build and publish
|
||||
run: flit publish --setup-py
|
||||
env:
|
||||
FLIT_USERNAME: __token__
|
||||
FLIT_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
|
||||
96
.github/workflows/test.yml
vendored
|
|
@ -1,96 +0,0 @@
|
|||
name: tests
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Build and test on ${{ matrix.operating-system }} with Python ${{ matrix.python-version }}
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
python-version: ["3.8", "3.9", "3.10"]
|
||||
operating-system: [windows-latest, ubuntu-latest]
|
||||
|
||||
runs-on: ${{ matrix.operating-system }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Python ${{ matrix.python-version }}
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: ${{ matrix.python-version }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python3 -m pip install --upgrade pip
|
||||
pip install --upgrade './[dev]'
|
||||
|
||||
- name: Check code and formatting
|
||||
run: scripts/check-python.sh great_ai tests
|
||||
|
||||
- name: Run tests
|
||||
run: python3 -m pytest --doctest-modules --cov=. --cov-report=xml --junit-xml pytest.xml --asyncio-mode=strict || true
|
||||
|
||||
- name: Upload results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Unit test coverage (Python ${{ matrix.python-version }} - ${{ matrix.operating-system }})
|
||||
path: "*.xml"
|
||||
|
||||
sonar:
|
||||
name: Analyse Python project with SonarQube
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install --upgrade .
|
||||
rm -rf build
|
||||
|
||||
- name: Download test results
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- uses: sonarsource/sonarqube-scan-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
|
||||
with:
|
||||
args: >
|
||||
-Dsonar.projectKey=great-ai
|
||||
-Dsonar.login=${{ secrets.SONAR_TOKEN }}
|
||||
-Dsonar.verbose=true
|
||||
-Dsonar.python.coverage.reportPaths=artifacts/*/coverage.xml
|
||||
-Dsonar.coverage.exclusions=**/external/**/*
|
||||
-Dsonar.exclusions=**/external/**/*,artifacts/**/*
|
||||
|
||||
publish-test-results:
|
||||
name: Publish unit test results
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
if: always()
|
||||
steps:
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: artifacts
|
||||
|
||||
- name: Publish results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
with:
|
||||
files: artifacts/*/pytest.xml
|
||||
1
.gitignore
vendored
|
|
@ -9,3 +9,4 @@ __pycache__
|
|||
*.egg-info
|
||||
build
|
||||
tracing_database.json
|
||||
.tox
|
||||
|
|
|
|||
3
.vscode/settings.json
vendored
|
|
@ -36,11 +36,13 @@
|
|||
"organisation's",
|
||||
"Parcoords",
|
||||
"plotly",
|
||||
"pretrained",
|
||||
"proba",
|
||||
"pydantic",
|
||||
"pymongo",
|
||||
"pyplot",
|
||||
"redoc",
|
||||
"scibert",
|
||||
"serialise",
|
||||
"sklearn",
|
||||
"starlette",
|
||||
|
|
@ -66,6 +68,7 @@
|
|||
"**/.pytest_cache": true,
|
||||
"**/*.egg-info": true,
|
||||
"**/*.cache": true,
|
||||
"**/*.tox": true,
|
||||
"**/tracing_database.json": true
|
||||
},
|
||||
"notebook.output.textLineLimit": 400,
|
||||
|
|
|
|||
29
.vscode/tasks.json
vendored
|
|
@ -11,23 +11,42 @@
|
|||
"group": "test",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
"showReuseMessage": false,
|
||||
"panel": "shared"
|
||||
},
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Test",
|
||||
"label": "Test (quick)",
|
||||
"type": "shell",
|
||||
"command": "source .env/bin/activate && python3 -m pytest . --doctest-modules",
|
||||
"command": "source .env/bin/activate && python3 -m pytest . --doctest-modules --asyncio-mode=strict",
|
||||
"windows": {
|
||||
"command": ".env\\bin\\activate.bat; python3 -m pytest . --doctest-modules"
|
||||
"command": ".env\\bin\\activate.bat; python3 -m pytest . --doctest-modules --asyncio-mode=strict"
|
||||
},
|
||||
"group": "test",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "new"
|
||||
"showReuseMessage": false,
|
||||
"panel": "shared"
|
||||
},
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Test (all Python versions)",
|
||||
"type": "shell",
|
||||
"command": "source .env/bin/activate && python3 -m tox",
|
||||
"windows": {
|
||||
"command": ".env\\bin\\activate.bat; python3 -m tox"
|
||||
},
|
||||
"group": "test",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"showReuseMessage": false,
|
||||
"panel": "shared"
|
||||
},
|
||||
"options": {
|
||||
"cwd": "${workspaceFolder}"
|
||||
|
|
|
|||
53
README.md
|
|
@ -1,14 +1,15 @@
|
|||
# <img src="https://github.com/schmelczer/great-ai/blob/main/docs/media/logo.png" alt="logo of great-ai" width=60 /> GreatAI
|
||||
# <img src="https://raw.githubusercontent.com/schmelczer/great-ai/main/docs/media/logo.png" alt="logo of great-ai" width=60 /> GreatAI
|
||||
|
||||
> Easily transform your prototype AI code into production-ready software.
|
||||
|
||||
[](https://badge.fury.io/py/great-ai)
|
||||
[](https://pepy.tech/project/great-ai)
|
||||

|
||||
[](https://hub.docker.com/repository/docker/schmelczera/great-ai)
|
||||
[](https://github.com/schmelczer/great-ai/actions/workflows/test.yml)
|
||||
[](https://sonar.scoutinscience.com/dashboard?id=great-ai)
|
||||
[](https://sonar.scoutinscience.com/dashboard?id=great-ai)
|
||||
|
||||
Applying AI is becoming increasingly easier but many case studies have shown that these applications are often deployed poorly. This may lead to suboptimal performance and to introducing unintended biases. GreatAI helps fixing this by allowing you to easily transform your prototype AI code into production-ready software.
|
||||
Applying AI is becoming increasingly more accessible, but many case studies have shown that these applications are often deployed poorly. This may lead to suboptimal performance and to introducing unintended biases. GreatAI helps fix this by allowing you to easily transform your prototype AI code into production-ready software.
|
||||
|
||||
## Example
|
||||
|
||||
|
|
@ -16,7 +17,7 @@ Applying AI is becoming increasingly easier but many case studies have shown tha
|
|||
pip install great-ai
|
||||
```
|
||||
|
||||
> Create a new file called `demo.py`
|
||||
Create a new file called `demo.py`
|
||||
|
||||
```python
|
||||
from great_ai import GreatAI
|
||||
|
|
@ -26,36 +27,42 @@ def greeter(name: str) -> str:
|
|||
return f"Hello {name}!"
|
||||
```
|
||||
|
||||
Start it by executing `great-ai demo.py`, find the dashboard at [http://localhost:6060](http://localhost:6060/dashboard).
|
||||
Start it by executing `great-ai demo.py`, and find the dashboard at [http://localhost:6060](http://localhost:6060/dashboard).
|
||||
|
||||

|
||||

|
||||
|
||||
That's it. Your GreatAI service is *nearly* ready for production use. Many of the [SE4ML best-practices](https://se-ml.github.io) are configured and implemented automatically (of course, these can be customised as well).
|
||||
That's it. Your GreatAI service is _nearly_ ready for production use. Many of the [SE4ML best practices](https://se-ml.github.io) are configured and implemented automatically (of course, these can be customised as well).
|
||||
|
||||
[Check out the full documentation here](https://great-ai.scoutinscience.com).
|
||||
|
||||
## Why is this GREAT?
|
||||
|
||||

|
||||

|
||||
|
||||
GreatAI fits between the prototype and deployment phases of your AI development lifecycle. This is highlighted with blue in the diagram. Here, a number of best practices can be automatically implemented aiming to achieve the following attributes:
|
||||
GreatAI fits between the prototype and deployment phases of your AI development lifecycle. This is highlighted in blue in the diagram. Here, several best practices can be automatically implemented, aiming to achieve the following attributes:
|
||||
|
||||
- **G**eneral: use any Python library without restriction
|
||||
- **R**obust: have error-handling and well-tested utilities out-of-the-box
|
||||
- **R**obust: have error-handling and well-tested utilities out-of-the-box
|
||||
- **E**nd-to-end: utilise end-to-end feedback as a built-in, first-class concept
|
||||
- **A**utomated: focus only on what actually requires your attention
|
||||
- **T**rustworthy: deploy models that you and society can confidently trust
|
||||
|
||||
## Why GreatAI?
|
||||
|
||||
There are other, existing solutions aiming to facilitate this phase. [Amazon SageMaker](https://aws.amazon.com/sagemaker) and [Seldon Core](https://www.seldon.io/solutions/open-source-projects/core) provide the most comprehensive suite of features. If you have the opportunity to use them, do that because they're great.
|
||||
There are other existing solutions aiming to facilitate this phase. [Amazon SageMaker](https://aws.amazon.com/sagemaker) and [Seldon Core](https://www.seldon.io/solutions/open-source-projects/core) provide the most comprehensive suite of features. If you have the opportunity to use them, do that because they're great.
|
||||
|
||||
However, [research indicates](https://great-ai.scoutinscience.com) that professionals rarely use them. This may be due to their inherent setup and operating complexity. **GreatAI is designed to be as simple to use as possible.** Its clear, high-level API and sensible default configuration makes it extremely easy to start using. Despite its relative simplicity over Seldon Core, it still implements many of the [SE4ML best-practices](https://se-ml.github.io), and thus, can meaningfully improve your deployment without requiring prohibitively large effort.
|
||||
|
||||
## Find `great-ai` on [PyPI](https://hub.docker.com/repository/docker/schmelczera/great-ai)
|
||||
However, [research indicates](https://great-ai.scoutinscience.com) that professionals rarely use them. This may be due to their inherent setup and operational complexity. **GreatAI is designed to be as simple to use as possible.** Its straightforward, high-level API and sensible default configuration make it easy to start using. Despite its relative simplicity over Seldon Core, it still implements many of the [SE4ML best practices](https://se-ml.github.io), and thus, can meaningfully improve your deployment without requiring prohibitively great effort.
|
||||
|
||||
## [Learn more](https://great-ai.scoutinscience.com)
|
||||
|
||||
[Check out the full documentation here](https://great-ai.scoutinscience.com).
|
||||
|
||||
## Find `great-ai` on [PyPI](https://pypi.org/project/great-ai/)
|
||||
|
||||
```sh
|
||||
pip install great-ai
|
||||
```
|
||||
|
||||
## Find `great-ai` on [DockerHub](https://hub.docker.com/repository/docker/schmelczera/great-ai)
|
||||
|
||||
```sh
|
||||
|
|
@ -71,18 +78,26 @@ Contributions are welcome.
|
|||
```sh
|
||||
python3 -m venv --copies .env
|
||||
source .env/bin/activate
|
||||
pip install flit
|
||||
flit install --symlink --deps=all
|
||||
pip install --upgrade flit pip
|
||||
flit install --symlink
|
||||
```
|
||||
|
||||
### Run tests
|
||||
### Develop
|
||||
|
||||
```sh
|
||||
pytest --doctest-modules --asyncio-mode=strict
|
||||
scripts/format-python.sh great_ai docs tests
|
||||
```
|
||||
|
||||
### Serve documentation
|
||||
> Format code.
|
||||
|
||||
```sh
|
||||
python3 -m pytest --doctest-modules --asyncio-mode=strict .
|
||||
```
|
||||
|
||||
> Run tests.
|
||||
|
||||
```sh
|
||||
mkdocs serve
|
||||
```
|
||||
|
||||
> Serve documentation.
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
# Summarising scientific publications from a tech-transfer perspective
|
||||
|
||||
This example shows how `great-ai` is used in practice at ScoutinScience.
|
||||
|
||||
<div style="display: flex; justify-content: center;" markdown>
|
||||
[:material-test-tube: Check out the code](https://github.com/schmelczer/great-ai/tree/main/docs/examples/scibert){ .md-button .md-button--primary }
|
||||
</div>
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
FROM schmelczera/great-ai:v0.1.4
|
||||
|
||||
COPY requirements.txt ./
|
||||
RUN pip install --no-cache-dir --requirement requirements.txt
|
||||
|
||||
COPY . ./
|
||||
|
||||
RUN large-file --backend s3 --secrets s3.ini --cache scibert-highlights
|
||||
|
||||
CMD ["deploy.ipynb"]
|
||||
75
docs/examples/scibert/additional-files.md
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# Additional files in the repository
|
||||
|
||||
In order to give you a smooth experience while comprehending this example, all non-notebook files are presented on this page in one place. In reality, these files should be in your project's top-level directory.
|
||||
|
||||
## config.ini
|
||||
|
||||
```ini title="config.ini"
|
||||
ENVIRONMENT = DEVELOPMENT
|
||||
ENVIRONMENT = ENV:ENVIRONMENT
|
||||
|
||||
MONGO_CONNECTION_STRING=ENV:MONGO_CONNECTION_STRING
|
||||
MONGO_DATABASE=highlights
|
||||
|
||||
AWS_REGION_NAME = eu-west-2
|
||||
AWS_ACCESS_KEY_ID = MY_DEFAULT_AWS_ACCESS_KEY_ID_FOR_DEVELOPMENT
|
||||
AWS_SECRET_ACCESS_KEY = MY_DEFAULT_AWS_SECRET_ACCESS_KEY_FOR_DEVELOPMENT
|
||||
LARGE_FILES_BUCKET_NAME = my-orgs-large-files
|
||||
|
||||
AWS_REGION_NAME = ENV:AWS_REGION_NAME
|
||||
AWS_ACCESS_KEY_ID = ENV:AWS_ACCESS_KEY_ID
|
||||
AWS_SECRET_ACCESS_KEY = ENV:AWS_SECRET_ACCESS_KEY
|
||||
LARGE_FILES_BUCKET_NAME = ENV:LARGE_FILES_BUCKET_NAME
|
||||
```
|
||||
|
||||
> All necessary configuration which is read by [great_ai.utilities.ConfigFile][]. This will resolve values starting with `ENV:` from your environment variables.
|
||||
|
||||
## requirements.txt
|
||||
|
||||
```requirements.txt title="requirements.txt"
|
||||
torch==1.12.0
|
||||
transformers==4.20.1
|
||||
numpy==1.23.0
|
||||
```
|
||||
|
||||
> Usually, it is recommended to pin (freeze) the library versions on which we depend. This file is referenced by the [Dockerfile](#dockerfile).
|
||||
|
||||
## Dockerfile
|
||||
|
||||
```Dockerfile title="Dockerfile"
|
||||
FROM schmelczera/great-ai:v0.1.6
|
||||
|
||||
COPY requirements.txt ./
|
||||
RUN pip install --no-cache-dir --requirement requirements.txt
|
||||
|
||||
COPY . ./
|
||||
|
||||
RUN large-file --backend s3 --secrets s3.ini --cache scibert-highlights
|
||||
|
||||
CMD ["deploy.ipynb"]
|
||||
```
|
||||
|
||||
> This is used by the CD pipeline to create the production deployment of the service.
|
||||
|
||||
## .dockerignore
|
||||
|
||||
```dockerignore title=".dockerignore"
|
||||
.cache
|
||||
.git
|
||||
data
|
||||
.gitignore
|
||||
.env
|
||||
.vscode
|
||||
.dockerignore
|
||||
Dockerfile
|
||||
.mypy_cache
|
||||
.gitignore
|
||||
**/__pycache__
|
||||
**/.DS_Store
|
||||
README.md
|
||||
```
|
||||
|
||||
> It is useful not to send, for example, the `.cache` folder used by LargeFile to the docker daemon; this will speed up your local build times substantially.
|
||||
|
||||
!!! Note ".gitignore"
|
||||
A very similar looking `.gitignore` file should also be present.
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
ENVIRONMENT = DEVELOPMENT
|
||||
ENVIRONMENT = ENV:ENVIRONMENT
|
||||
|
||||
MONGO_CONNECTION_STRING=ENV:MONGO_CONNECTION_STRING
|
||||
MONGO_DATABASE=highlights
|
||||
|
||||
AWS_REGION_NAME = ENV:AWS_REGION_NAME
|
||||
AWS_ACCESS_KEY_ID = ENV:AWS_ACCESS_KEY_ID
|
||||
AWS_SECRET_ACCESS_KEY = ENV:AWS_SECRET_ACCESS_KEY
|
||||
LARGE_FILES_BUCKET_NAME = ENV:LARGE_FILES_BUCKET_NAME
|
||||
310
docs/examples/scibert/data.ipynb
Normal file
|
|
@ -1,501 +0,0 @@
|
|||
{
|
||||
"While promising advancements in improved photosynthesis may be achieved by genetic modification CITATION, we argue that using natural genetic variation for photosynthesis holds an equally promising potential for improvement.": true,
|
||||
"We find that market parameters have a more significant impact on pricing decision and the profit of the platform than logistics parameters, while logistics parameters affect the time decision of the platform more significantly than market parameters.": false,
|
||||
"We find that local informal competition has a robust negative effect on product innovation intensity of formal firms, while within industry informal competition enhances innovative sales.": false,
|
||||
"Then we substantiate our claim of a need for a new chaplain-led intervention, building on various promising and effective interventions of spiritual care that have been developed in recent years.": false,
|
||||
"The framework allows us to: i better qualify the categories of sustaining and disruptive innovation; ii understand the evolution of hybrid patterns of market innovation, since the elements of emerging disruptive innovations sometimes sustain the established technology, and; iii assess and map emerging market patterns.": false,
|
||||
"More importantly, we develop a novel hypothesis about the complementarity between founder social capital and a startup's technological capabilities to suggest that the bargaining impact of founders' social capital becomes more pronounced when a startup is also endowed with superior technological capabilities.": false,
|
||||
"In this setting we will develop novel analysis tools for generic identifiability of subnetworks that are formulated in terms of disconnecting sets in the graph of the network models, and we will show that this leads to a new and effective synthesis procedure for allocating external excitation signals for achieving identifiability of a subnetwork.": false,
|
||||
"However, we show that increased portfolio disclosure creates additional skill re-assessment risk from mutual fund investors for the fund managers, which can lead to an increase in management fees, a decrease in risk taking and thus a decline in net fund performance.": false,
|
||||
"Here, we critically review the most important pre-clinical and clinical findings, recent advances in CAR-T against myeloma, as well as discoveries in the biology of a still incurable disease, that, all together, will further improve safety and efficacy in relapsedrefractory patients, urgently in need of novel treatment options.": false,
|
||||
"For the funds that are forced by the regulation to increase their disclosure frequency hereafter, \"semi-annual funds\", we find that mandating more frequent portfolio disclosure increases the skill re-assessment risk from mutual fund investors for managers of high-volatility funds relative to those of low-volatility funds.": false,
|
||||
"While some of these described competitions overlap the structures and goals of existing alternatives, we believe that the benefits of our system, combined with the novel and varied ideas we present, will make Ludii one of the most attractive and popular competition platforms in future years.": false,
|
||||
"We described KIs' potential to improve combination therapies for solid cancers, and we anticipate that ongoing clinical trials will ultimately guide the implementation of optimal combinatorial approaches to maximize the immune system's anti-tumor activity.": false,
|
||||
"We conclude that the integrative model-based approach of evaluating the potential of new cropping systems in complex systems and fine-tuning alternative combinations will support the enhanced adaptability of innovative cropping practices to provide a sustainable livelihood to marginal households.": false,
|
||||
"We argue therefore that the time has come to focus on advancing the DBS system in terms of technological properties to better meet individual patient needs, leading to more effective symptom control, improved patient quality of life and reduced healthcare costs.": true,
|
||||
"Our findings can be used to improve existing school programs, for example, by integrating effective components in programs, or by developing new promising school-based programs that comprise the most effective components.": true,
|
||||
"In this article, we likewise argue that articulating the drivers and infrastructures that enable the introduction of novel technologies in our case: in PPH will aid the moral assessment of these developments, while it may also allow us to develop tools for critical self-analysis by stakeholders involved in such developments.": false,
|
||||
"Convinced of the potential of the VKB to revolutionize clinical trial data sharing among biopharmaceutical companies, our group in the EAPM is currently working, in cooperation with representatives of the biopharmaceutical industry, to resolve the issues mentioned above and to develop the web-based platform.": false,
|
||||
"Confirming previous work, we showed the potential to reduce GHG emissions from agricultural soils by the application of organic amendments CITATION; however, also the addition of MF in our mesocosm led to a promising development of the cumulative GHG.": true,
|
||||
"Compared to previous studies for instrument segmentation in the NUMBER D US, our proposed method achieves a higher accuracy with a considerably higher prediction efficiency, which offers a promising value for clinical implementation.": true,
|
||||
"Although innovation is the cornerstone of our conceptual model, which hypothetically affects firm performance, our results theoretically contribute to BMI research by highlighting the significance of the organisational capabilities as a mediator when planning to introduce innovations to enhance firm performance.": false,
|
||||
"With its clinical-driven design and easy-to-use setup, our robotic device for hand sensorimotor rehabilitation has the potential for high clinical acceptance, applicability and effectiveness.": true,
|
||||
"We expect that such freedom of choice, in turn, facilitates competition on quality or price, thereby making the private-client segment of the audit market a well-suited setting to study the price and quality effects of market structure and competition.": false,
|
||||
"We also propose improvements to the IKK attack by showing that the accuracy of the attack can be improved significantly by combining multiple attack runs, as we show that median recovery rates can be increased up to NUMBER percentage points, whereas the variance of recovery rates of simulation can be decreased up to NUMBER percentage points.": false,
|
||||
"There is great potential for the digital tools to increase access to eye care and we expect the accuracy of the current tools to improve with every iteration in technology development.": false,
|
||||
"Second, we propose a novel modeling approach, which allows to disentangle between product and process innovation, to empirically investigate innovation activity over the industry life-cycle on a comprehensive database of NUMBER European manufacturing industries.": false,
|
||||
"Our main finding is that to understand investor behaviour, different dimensions of investor characteristics and behaviour should be analysed concurrently; investors' scale of operation, ownership composition, type of capital, and locational and strategic behaviour help configure investment decisions in relation to property market shifts.": false,
|
||||
"From additional policy experiments, we find that labor market reforms aimed at weakening labor unions, by boosting profit margins and innovation, can foster a profit-led growth.": false,
|
||||
"First, since there is already some evidence on the effect of innovation vouchers on future collaborations CITATION, the main contribution of our paper lies in understanding if this policy tool and the use of external knowledge providers by SMEs also leads to improved innovation outcomes.": false,
|
||||
"By adopting a data set from a leading O NUMBER O freight platform in China, we find that the proposed model can effectively increase the revenue of the platform by more than NUMBER if the platform increases the price appropriately.": false,
|
||||
"Based on our findings we demonstrate that the framework of IMSI and SDT can effectively be applied as a frame of analysis to identify essential features of sustainability in educational innovations and we discuss how concepts of SDT deepen the knowledge of sustainable educational innovation.": false,
|
||||
"While these tools represent a significant progress in automated rapid generation and modification of NUMBER D molecular geometries, we sought to develop an easy-to-use tool which can quickly create reasonably accurate molecular geometries in the local chemical space of a given molecular scaffold.": true,
|
||||
"While AI-systems have the potential to increase market efficiency and economic welfare through improved predictions, these positive effects can only unfold in so far as the individual market actors i recognize that potential and ii subsequently engage with them.": false,
|
||||
"We propose a novel approach to address the path explosion problem: A smart triaging system that leverages supervised machine learning techniques to replicate human expertise, leading to vulnerable path discovery.": false,
|
||||
"We conclude that the most promising packages are combining innovation support and information provision with either a carbon tax and adoption subsidy, or with a carbon market.": false,
|
||||
"Therefore we employ a more objective indicator-market share of the niche-as the second axis, which helps to sketch socio-technical trajectories of niche innovations in the market overtime both regime sustaining and disruptive innovations.": false,
|
||||
"The increased complexity of modern sociotechnical systems STS necessitates the need for a manageable representation of their attributes, to augment our understanding and enable the development of ways through which we can increase their effectiveness, efficiency, and safety.": false,
|
||||
"Motivated by the potential for improving the capacities of socially intelligent systems, we investigate the potential of recognizing an individual's interdependence perceptions through an analysis of audiovisual recordings of dyadic conversational interaction.": false,
|
||||
"More precisely, our results suggest that the structure of knowledge networks are positively correlated with the innovative capacity, with particular reference to the cohesion of inventor networks, while social proximity offers a different, and precisely negative, contribution for breakthrough innovation.": false,
|
||||
"Methods: Using the case of the nationwide implementation of WGS into clinical practice in lung cancer in the Dutch healthcare system, we developed a simulation model to show that including service delivery features across the diagnostic pathway can provide essential insight into the affordability and accessibility of care at the systems level.": false,
|
||||
"In section four, we develop some illustrative examples to demonstrate the functionalities of the database: we look at water to illustrate the potential for studying access to amenities and we look at assets to illustrate the potential for studying inequalities.": false,
|
||||
"In general, our results indicate that an enabling performance measurement system design and an enabling system development process both independently increase procedural fairness and decrease red tape.": false,
|
||||
"FOREC demonstrates robust effectiveness, consistently improving the performance compared to competitive baselines on NUMBER target markets we selected for our study.": false,
|
||||
"Consistent with our conjecture that managers require more compensation for bearing the elevated skill re-assessment risk from fund investors, we find that following the regulatory change, high volatility semi-annual funds significantly increase management fees, relative to low volatility semi-annual funds.": false,
|
||||
"We encourage researchers to continue contribut-ing insights to enable the development and assessment of retail service innovations that create positive outcomes for shoppers, investors and the implementing retail firm.": false,
|
||||
"We are still in the very early stages of mobile-health implementation in psychiatry; however, if successfully developed, a mobile platform for early detection has the potential to help achieve major translational goals, such as early recognition of mental problems, accelerating access to care, and personalized monitoring of relapse.": false,
|
||||
"Recognizing the promising clinical potential of RSPOs as novel therapeutic targets, a clinical trial has been set-up that tested the safety and efficacy of the neutralizing monoclonal anti-RSPO NUMBER antibody OMP NUMBER R NUMBER Rosmantuzumab in cancer patients with advanced solid tumors and metastatic CRC CITATION.": false,
|
||||
"Immigrant inventors played a crucial role in making the United States an innovation powerhouse, by bringing new knowledge from their countries of origin CITATION and contributing to the longterm technological development of the US innovation system CITATION.": false,
|
||||
"Finally, we illustrated the applicability of the proposed implementations and design algorithms in a network consensus application, where we have shown that CEV-GF filters achieve machine-precision accuracy at a significantly lower communication cost than existing methods.": false,
|
||||
"We suggest that these differences may lead to a fractured market and an AI crisis in which different members of the EU will adopt nation-centric strategies to exploit AI, thus preventing the development of a frictionless market as envisaged by the EU.": false,
|
||||
"We show that, unlike in lemons markets, adverse selection in gems markets affects low-quality goods, leaving only high-quality goods on the market, pushing up prices.": false,
|
||||
"We provide theoretical foundations and empirical evidence for the impact of oil discoveries on the level of tariffs, illustrating that such discoveries can lead to economically significant higher levels of protectionism.": false,
|
||||
"We propose that IT governance process capability can improve IT performance, which in turn can improve business performance.": false,
|
||||
"We have therefore demonstrated the innovative performance of our pilot-scale melt-electrospinning device, which bridges the gap between laboratory-scale and pilot-scale manufacturing and achieves fiber diameters comparable to those produced by conventional solution electrospinning.": true,
|
||||
"We have therefore demonstrated the innovative performance of our pilot-scale melt electrospinning device, which bridges the gap between laboratory-scale and pilot-scale manufacturing and achieves fiber diameters comparable to those produced by conventional solution electrospinning.": true,
|
||||
"We demonstrate that markets with a high share of supply from VRES yield a significantly lower forward premium than markets with a low market share of wind or solar supply.": false,
|
||||
"We build a novel dataset of immigrant inventors to examine their impact on the US inventing activity between NUMBER and NUMBER Did native inventors benefit from immigrants' inventive activity?": false,
|
||||
"We believe the framework may add value to the development of robust HTA methods and effective implementation, which helps meet the needs for novel HTA methods due to emerging health technologies.": false,
|
||||
"To develop a conceptual framework for the translocal diffusion of sustainability innovations, we will use both the transition literature as well as the regional innovation systems literature, because of their complementary character on the topic of translocal diffusion of sustainability innovations.": false,
|
||||
"Therefore, we posit a need for novel approaches that enable studying host-microbe dynamics in a community ecology perspective, which can be utilised for devising effective diagnostic and therapeutic strategies.": false,
|
||||
"The use of multiple cameras and RGB-D devices may indeed improve the acquisition performance and precision, but renders the system more complex and costly, going against our goal to keep the system as simple and low-cost as possible.": false,
|
||||
"The development of influenza vaccines produced by transient expression is therefore one of the key niches of molecular farming that show unambiguous advantages over all other current manufacturing platforms, and this is reflected by the keen interest and investment in the platform by the US and Canadian governments.": false,
|
||||
"The collaboration and outsourcing of economic activities, we argued, enable registered firms to take strategic advantage of the'local' market acceptance of informal enterprises to expand market size and perform better with product innovations.": false,
|
||||
"Our results demonstrate the feasibility of such co-flocculation strategy for designing new high-rate anode material, which outperforms the original bulk HTiNbO NUMBER compound, making it a promising candidate for application in ultrafast lithium-ion batteries.": true,
|
||||
"Our findings demonstrate the potential effectiveness of an online evidence-based patient information portal in improving knowledge in patients with congenital heart disease, but also underline the crucial importance of effective implementation and active use of the portal.": false,
|
||||
"Moreover, our data show the potential of the PEA as a biomarker discovery tool in vitreous samples by highlighting CD NUMBER as a novel marker with potential diagnostic value for PVRL.": true,
|
||||
"Lastly, we provide a benchmarking tool that uses datasets following this standard to measure the performance of equivalent mutant problem tools, showing the performance in greater detail than state of the art EMP evaluation tools.": false,
|
||||
"Here, we propose a different method to achieve better scalability and higher accuracy using quantum computing, outperforming classical Bayesian neural networks for large datasets significantly.": true,
|
||||
"Here, we also synthetize the design of the architecture of the wireless monitoring network, the sensor technology adopted to develop an effective real time environmental monitoring system and management platform, to construct a Wireless Sensor Network WSN-early warning and reporting system, which can be applied as a prevention measure.": false,
|
||||
"By developing a new capital endogenization method that addresses the above temporality issue, we present a novel analysis on how China's capital development and the associated resource use and emissions over the past NUMBER decades CITATION are linked to meeting the final consumption of China and other countries throughout this time period.": false,
|
||||
"Although several ABS frameworks exist that achieve significant speedups using GPUs in the field of ABS, there is still significant room for improvement, which we wish to address in this article.": false,
|
||||
"Additionally, we developed a novel decentralized market clearing method called DACO that provides a near-optimal market solution in terms of maximum social welfare within limited number of stages.": false,
|
||||
"We broadly define market innovation as purposive actions by market stakeholders that result in a distinctively new or altered form of market.": false,
|
||||
"Using the variability of profitability among segments as our measure of the disclosure of crosssegment differences in performance, we find that existing competition is positively associated with cross-segment variability in profitability, whereas potential competition is negatively associated with cross-segment variability in profitability.": false,
|
||||
"To demonstrate the potential of PPO in industrial use, we show that for larger problem instances where the optimal solution is unknown, the algorithm finds solutions that outperform the benchmark an aggregate modified base-stock heuristic by NUMBER.": false,
|
||||
"To accomplish such goals as mentioned above, we need novel, sophisticated imaging tools CITATION CITATION CITATION as well as innovations to cushion the joint so that we are able to diagnose and treat the cartilage damage at the early subclinical phase.": false,
|
||||
"Overall, the application of our sectoral approach reveals that the need and potential for global governance to contribute to effective climate protection varies significantly across sectoral systems.": false,
|
||||
"Our work enables us to open the black box of the digitally enabled innovation activity by shedding light on collaborative activities between a focal firm and its customers and suppliers to advance innovation while coping with information overload.": false,
|
||||
"Our work demonstrates the possibility of using the BIL functionalized polymer as a tailorable and robust electrolyte material platform for scalable in situ NUMBER D printing of implantable energy storage devices that can potentially be utilized as biomedical devices and implants for healthcare applications.": true,
|
||||
"Our results demonstrate the efficacy of the proposed method for the optimization of light-matter coupling and its potential application for the enhanced performance of optoelectronic devices.": true,
|
||||
"However, substantial challenges, such as production cost, scalability, and compatibility with current manufacturing pipelines in industry, remain and need to be overcome before we can see the full potential of the materials benefit the public.": false,
|
||||
"For the area of automated machine learning, our work clearly demonstrates the potential of using multi-objective algorithm configurators within an integrated system leveraging many state-of-the-art techniques-an idea that can be extended to many other problems in machine learning in which multiple conflicting performance objectives arise.": false,
|
||||
"Finally, we devised a novel strategy for fusing medium resolution Sentinel-NUMBER and high resolution TerraSAR-X data to increase mapping accuracy by using the potential of both sensing systems.": false,
|
||||
"Compared to the earlier version, we have CITATION redefined our proposed system model; CITATION performed five additional novel experiments that demonstrate the efficacy of our solution; CITATION added a section about future work.": false,
|
||||
"While many MLD systems suffer from low deposition rates that limit their potential for use in new applications, we believe this work can help to give directions in optimizing the already created deposition recipes and in developing new MLD precursors, processes and equipment for lowcost and high-throughput applications.": false,
|
||||
"We also show that improvements in the classification performance can subsequently lead to a significantly better performance in the segmentation task.": false,
|
||||
"Our study shows that the inclusion of SNM, unlocks a certain market focus into DT that makes considerations on desirability, viability and feasibility less about the product alone, and more about the product and its deployment to the market.": false,
|
||||
"Our study delineates the impact of knowledge inflows from specific external sources, such as market-and science-based sources, on innovation performance in FFs and non-FFs and identifies which knowledge inflow sources FFs can convert into innovation outcomes more or less effectively than non-FFs.": false,
|
||||
"Our novel methodological approach builds on the theory of a problem-solution space for mission-oriented innovation systems proposed by CITATION NUMBER, allowing identification of interdependencies and hierarchies in and between missions that may lead to trade-offs.": false,
|
||||
"Our hybrid approach has great potential for the development of novel potential protein therapies, as it in part sidesteps the extrapolation challenges from NUMBER D or animal models to complex human physiology by efficiently combining in silico approaches with biologically relevant in vitro test systems.": false,
|
||||
"On this basis, we can assess the potential of international cooperation to address the challenges specific sectoral systems face in the climate transition as well as the extent to which existing sectoral institutional complexes deliver on this potential.": false,
|
||||
"In addition, we will further assess the proposed market using the data from other European countries and we will consider more complex trading strategies to quantify the maximum potential of the proposed market.": false,
|
||||
"In Chapter NUMBER we develop the theory of p-automata, which is essential to us for solving some algebraic equations in chapter NUMBER We start by defining in Section NUMBER concepts such as p-automaton and p-automatic sequences, and we finish with the theorem of Christol relating algebraic power series to automatic sequences.": false,
|
||||
"However, in second-generation processes, significant residual amounts of stillage are produced, and the development of effective valorization routes towards added-value platform chemicals for this material is key in boosting the profitability of the NUMBER generation bioethanol industry CITATION.": false,
|
||||
"Furthermore, we proposed an improved projection random sample consensus RANSAC method, which can effectively divide the detection plane of catenary cantilever devices to solve the multicantilever device occlusion problem.": false,
|
||||
"First, our study indicated that the collaborative process of collaborative innovation contests, facilitated by DT, can potentially bridge the mismatch between open innovation outcomes and company capabilities to adopt such innovation.": false,
|
||||
"By doing so, we are better prepared to adopt the framework for the analysis of electric propulsion systems in cars, a potentially disruptive innovation that has slowly been entering mainstream markets.": false,
|
||||
"As we enter an age of ubiquitous electronic health records EHRs, clinical decision support systems CDSS, and large, linked data sets with the potential to accommodate artificial intelligence AI algorithms, the need to better understand individual and collective decisionmaking has reached a critical point.": false,
|
||||
"Among others, we show that worse labor market prospects of the worker relative to the leader make it more costly to employ an altruistic leader and less costly to employ a spiteful leader, rendering the use of unfriendly leadership styles more attractive for the firm.": false,
|
||||
"All in all, using data across multiple asset classes and markets in an extended sample period, we conclude that r ROD positively and significantly predicts r LH and this robust pattern better describes market intraday momentum everywhere.": false,
|
||||
"While these tools represent a significant progress in automated and rapid generation of molecular geometries, we sought to develop an easy-to-use tool which can quickly create reasonably accurate molecular geometries in the local chemical space of a given molecular scaffold.": false,
|
||||
"We, therefore, have to wonder whether public organizations' use of social media can live up to the expectations that were raised more than a decade ago and whether a more effective tapping into the engaging potential of social media can indeed increase the visibility of public organizations on social media platforms.": false,
|
||||
"We show that the production of heterologous protein and MCFA contents are significantly enhanced when using the novel expression system, and we show that transformant strains are not impaired in growth.": true,
|
||||
"We found that employees with greater perceived future opportunities at work attached greater importance to mastery, meaning and affiliation needs i.e., approach needs, which in turn lead to higher engagement in need-congruent job and off-job crafting efforts.": false,
|
||||
"We argue in this paper that SNM aspects could serve as a necessary addition to DT to increase the chance of successful market implementation of sustainable innovations.": false,
|
||||
"To gain a better grasp of the evolving nature of markets in the NUMBER century, I return to the early theorizing by neoliberal thinkers of the market as an epistemic device that effectively and efficiently mediates information and knowledge between individuals and collective society.": false,
|
||||
"To address the unsatisfied needs in robotic sensorimotor rehabilitation, we aimed at developing a novel clinical-driven robotic hand rehabilitation device that is capable of high quality haptic rendering and that supports physiological full flexionextension of the fingers while offering an effortless setup.": false,
|
||||
"Therefore, we see the need of analyzing the potential benefits and trade-offs of the long-term implementation of these circular business models, especially in a market where they are gaining acceptance to further develop strategies to secure their possible environmental and material benefits.": false,
|
||||
"Our study therefore contributes to emergent research about the micro-foundations of firm strategy and performance e.g., CITATION, NUMBER;Foss and Pedersen, NUMBER; by emphasizing the role of founders in enabling a startup to capture superior value in their RD partnerships.": false,
|
||||
"More precisely, we show that for the tested problems such a single configuration switch can result in performance gains of up to NUMBER.With such a significant indication for improvement potential, we hope that our results trigger an intensified discussion of online algorithm configuration for CMA-ES variants.": false,
|
||||
"In doing so, we hope that B NUMBER B innovation managers will improve their conceptual perspective on innovation by including service design as an effective tool to foster stakeholder engagement throughout the project life cycle in the innovation network.": false,
|
||||
"In addition, we discuss what is needed to improve the situation further, in order to use this technology to its fullest advantage and avoid \"leaks in the pipeline\", when a promising device fails to take the next step of the valorization pathway and is abandoned.": false,
|
||||
"Experimental evaluations demonstrate that while state-of-the-art methods have limited capability of reconstructing USCT image from frequency domain data, our proposed method can effectively reconstruct details for USCT images, which could lead to faster diagnoses and treatment decisions for breast cancer patients.": true,
|
||||
"Drawing on self-determination and play theories, we develop a process model that proposes that daily playful work design PWD; designing fun, designing competition positively relates to employees' daily work engagement through basic psychological need satisfaction.": false,
|
||||
"In particular, we introduce a novel EarlyTSC framework addressing the MO-CASH problem for EarlyTSC that achieves the following: In Fig. NUMBER c, we illustrate the improvements that can be achieved by an automated search over an expanded space of multiple algorithms and all their hyperparameters.": false,
|
||||
"We suggest that significantly underexploited opportunities exist to enhance integration of such short-and long-term technology and policy interventions, which together could provide a more effective pathway to enable the appropriate intensification of groundwater use for irrigation in Nepal and the EIGP.": false,
|
||||
"We show that it can outperform state-of-the-art multiway and two-way Linear Discriminant Analysis classifiers in asynchronous detection of individual finger movements from intracranial recordings, an essential feature to achieve a sense of dexterity with hand prosthetics and exoskeletons.": false,
|
||||
"We provide recommendations to help achieve ASP systems designed to use climate forecasts, arguing that tailored seasonal forecast products have potential in some countries to improve the lead time of interventions to address climate-induced disasters.": false,
|
||||
"We have presented a novel and improved minimization algorithm for t-SNE, providing significant performance improvements above the state-of-the-art, especially for large datasets and higher dimensional embeddings.": true,
|
||||
"We find corroborating evidence for a temperature signal in brGMGT assemblages, further demonstrating the potential to develop novel proxies with more extensive studies of modern distributions.": false,
|
||||
"We detail how our algorithm can be implemented on the target platform or on NISQ computers, bringing forth a promising application of these devices.": false,
|
||||
"To overcome these limitations, we developed a highthroughput TCR repertoire and discovery platform that enables linking T cell phenotype with TCR gene and function data at single-cell level.": false,
|
||||
"To demonstrate the societal benefits of adherence improvement, we recommend that the most promising interventions are subjected to rigorous evaluation of clinical effectiveness in pragmaticallydesigned, randomized, controlled trials.": false,
|
||||
"The high-minus-low return spread is - NUMBER and - NUMBER for UK investors and Japanese investors, respectively, in the universe of all currencies, and - NUMBER and - NUMBER in the universe of developed markets' currencies, confirming that the US equity tail risk factor has a global component.": false,
|
||||
"Our study shows that there are performance trade-offs for each BPM orientation with regard to potential, selectivity, and stability: the forward bias lowers the overall cell potential by reducing the chemical potential, while the reverse bias gives a stable product formation of CO NUMBER conversion products.": false,
|
||||
"Our results when using this customized Six Sigma methodology demonstrate the suitability of this method for improving the SCA process in its different stages; from the basis of the process which is improving the quality of the acquired side-channel measurement to the performance of any kind of side-channel attack or leakage assessment technique.": false,
|
||||
"Our results show that the novel MRcollar design enables achieving comparable heating capabilities as compared to the current clinical HYPERcollar NUMBER D.": false,
|
||||
"Our main aim is to create a European research agenda, data sharing, and development of best practice for clinical and translational science to achieve breakthroughs with clinically feasible HIV cure strategies.": false,
|
||||
"Moreover, building also on estimates of NETs' achievable potential, which are well below biophysical limits CITATION, we calculate the actual deployment level of the most promising NETs that would be necessary to meet the NUMBER C target under three different scenarios CITATION, NUMBER b.": false,
|
||||
"In this review, we demonstrate that a web-based scoring platform can mitigate potential risk factors when including sTILs in clinical trials, and we argue that this framework can be applied for any future biomarker-driven clinical trial setting.": false,
|
||||
"Here, we examined the feasibility of, and initial responses to, large walking perturbations in COPD, as well as the adaptation potential of people with COPD to repeated walking perturbations that might indicate potential for perturbation-based balance training in COPD.": false,
|
||||
"Here we investigated interneuron abnormalities in two experimental models of EoP and explored the potential of two promising treatment strategies, namely intranasal mesenchymal stem cells MSCs or insulin-like growth factor I CITATION, to restore interneuron development.": false,
|
||||
"From the dynamic capabilities perspective, we assume that the development of CE in the firm implies the use of firm capabilities and the alignment of these in the development of a dynamic process of innovation towards the development of CE in firms.": false,
|
||||
"Due to the unique single-particle and single-molecule properties and high-throughput capabilities of SMLM techniques, we strongly believe these results highlight their potential to be used in the routine design, quality control and optimization of nanomaterials with improved biological efficacy.": false,
|
||||
"Comparison with several state-of-the-art baselines shows that our FairMatch algorithm is able to significantly improve the performance of recommendation results in terms of visibility of different items and suppliers with a negligible loss in the recommendation accuracy in some cases.": false,
|
||||
"By unpacking two key mechanisms for basic research investments to improve firms' innovation performance, our results provide a more detailed understanding of the changing rationale for basic research in firms in the context of declining corporate basic research investments.": false,
|
||||
"As such, there is increasing awareness of the need to address significant TR in a manner that comes with i an acceptable level of risk and ii a meaningful clinical outcome.": false,
|
||||
"With those in mind, we believe that improved knowledge on marine ES flows can also support the implementation of policy responses and actions as part of the Intergovernmental Science-Policy Platform on Biodiversity and Ecosystem Services IPBES agenda, to achieve sustainable governance and management of seascapes, oceans, and marine systems.": false,
|
||||
"While numerous studies have demonstrated that augmentation can improve classification and regression accuracies, to date none have explored augmenting multivariate time series i.e. Our research aims to fill this gap by identifying methods capable of successfully augmenting multivariate time series for regression analysis.": false,
|
||||
"We show that the proposed loss function significantly reduces the quantile crossing problem to near NUMBER in all markets considered, while in some cases simultaneously increasing forecasting performance based on classical point forecast metrics applied to the expected value of the probabilistic forecast.": false,
|
||||
"We show that optimal performance is achieved when all atomic levels experience the same potential outside the dimple and we quantify the cooling for various NA by evaluating the dependence of the final entropy densities and temperatures as functions of the initial entropy.": false,
|
||||
"We see a similar potential in the imaging context, which would allow for an improvement in the convergence of the inference and further enhance the sen-sitivity beyond the capabilities that we have demonstrated with this publication.": false,
|
||||
"We have found that labor market integration happens gradually in three stages of entering the labor market, integrating into the labor market and sub-merging with the labor market.": false,
|
||||
"We have developed the novel ChemoTopoChip platform to screen the potential of both chemistry and topography in producing immunomodulatory materials suitable for bone regenerative applications.": true,
|
||||
"We further propose several research perspectives that could support the LC-NE system as a promising target for the identification of at-risk individuals in the preclinical stages of AD, and for the development of novel preventive interventions.": false,
|
||||
"We find that mandatory disclosure of portfolio holdings exposes managers of highvolatility funds to considerable skill re-assessment risk from mutual fund investors, which steer their behavior towards actions that ultimately hurt investors.": false,
|
||||
"We find that a higher number of walk-in customer orders leads to optimal online order fulfillment policies with higher delivery frequencies, i.e., shorter staging times, which are required to mitigate the effect of increasing competition among the two sales channels for the same inventory positions on online service level.": false,
|
||||
"We explored whether the need for achievement and need for affiliation enhance the effects of course characteristics on students' entrepreneurial self-efficacy and study engagement, which advances our knowledge on how to teach entrepreneurship while taking individual differences into account.": false,
|
||||
"We evaluate the proposed method in simulation, showing that our framework can improve prediction performance over baseline methods and avoid catastrophic forgetting, and in experiments with a mobile robot, showing that our framework can continuously improve a prediction model without the need for external supervision.": false,
|
||||
"We discuss the collective, cumulative and uncertain characteristics of innovation, highlighting the lack of transparency in the biomedical RD system, the need for public investment in the innovation process, and the \"time-lag\" between risk-taking and reward.": false,
|
||||
"We conclude that our solution is a promising tool for privacy-preserving machine learning tasks on distributed patient data, potentially leading to an improvement of the quality of healthcare, while respecting the privacy of involved patients.": false,
|
||||
"We assume that actors can contribute to building up resources for innovation success like new knowledge, early market structures, financial capital or legitimacy, for example through RD, networking, investments, or institutional work, Musiolik and Markard, NUMBER CITATION, NUMBER b.": false,
|
||||
"We argue that industries using general and generally available knowledge can easily live with a deregulated hire fire labor market regime like in the US, while the functioning of the routine innovation model in mature but knowledge-intensive industries takes advantage of low rates of job turnover due to well-protected insider positions.": false,
|
||||
"Together, we developed cheap and easily synthesized compounds that dramatically outperform known crosslinking tools, providing the community with a novel strategy for understanding RNA NUMBER D structures and alternative conformations in cells.": true,
|
||||
"To overcome previous limitations, we devised novel methodology, enabling simultaneous invasive assessment of both LV and coronary hemodynamics for the first time.": false,
|
||||
"The reference distances of EP inventors referring to US inventors are much larger than those of US inventors referring to US inventors.": false,
|
||||
"The Seminar has also highlighted the need to pay due attention to technological developments that may help to overcome at least some of the problems that nowadays we face in the application of a healthy diet: new technologies may help modern husbandmen and farmers to produce healthy foods sticking to local traditions but also at a reasonable cost.": false,
|
||||
"Second, we find a substitutive interaction effect between market orientation and new product development stage, indicating that for exits through acquisitions, a high level of market orientation can compensate for an early stage of product development.": false,
|
||||
"Reconstruction results based on simulated data are very promising, and we think that, by addressing the practical issues discussed above, we will indeed make significant progress towards a reliable EPT reconstruction method that provides us with accurate dielectric tissue maps in practice.": false,
|
||||
"Our study establishes CXCL NUMBER as a key component in fibrosis development and the potential of blocking CXCL NUMBER as a promising therapeutic strategy.": false,
|
||||
"Our future work mainly lies in extending the proposed approach with more advanced network clustering algorithms, and our long term goal is to develop a highly efficient and intelligent system to automate the management of complex WMNs.": false,
|
||||
"On the basis of a feasibility analysis, we conclude that the identified challenges can most likely be successfully overcome by platform co-ops that organise taxi rides and professional jobs, while it may prove much more difficult in food delivery, homecare and microtasking.": false,
|
||||
"NUMBER We develop a tailor-made Frank-Wolfe algorithm that can solve the dual estimation problem orders of magnitude faster than state-of-the-art general purpose solvers.": false,
|
||||
"It is clear that we need to continue co-inventing the future of POC technology with multiple stakeholder groups towards the development of a global paradigm to address critical needs, and provide quality healthcare at affordable cost.": false,
|
||||
"Furthermore, our results have proved that the proposed modified U-Net is capable of considering the neighborhood effects effectively, whose advantage is eliminating the need of using a CA to combine with our method.": false,
|
||||
"For the second task, we obtain a question representation that contains all possible answers in equal quantum superposition, and we implement Grover's quantum search algorithm to find the correct answer, agnostic to the specific question, an implementation with the potential of delivering a result with quadratic speedup.": false,
|
||||
"Following on from this we show the results of applying the approaches to the robot platform demonstrating the effectiveness and accuracy that can be achieved.": false,
|
||||
"Finally, we expect that the disorder of metallic electrodes at the atomic scale leads to uncontrolled local electrostatic potential surrounding the nanoscale object, a problem that NUMBER D covalent crystals have the potential to overcome.": false,
|
||||
"Experimental results show that an upstream signaling rate of NUMBER kbps can be achieved with our simple and low-cost prototype, enabling NUMBER Gbits link per user.": false,
|
||||
"Drawing on the literature on sustainability-oriented innovation and innovation resistance theory, we explore the potential of blockchain technology to contribute to sustainable transformations within food supply chains.": false,
|
||||
"Despite our high-quality data and correction for competing risks in our prediction model for the development of SPTs, it should be further developed to allow clinical use.": false,
|
||||
"Based on the measurements and visual observations of the wake flow, we develop a hypothesis to explain how the presence of developed cavitation leads to increasing compressibility Mach number in the wake flow that, in turn, results in a change in the underlying flow pattern of the near-wake, leading to an increase in the vortex formation rate.": false,
|
||||
"As a proof of principle, to demonstrate the feasibility of releasing drugs, we also showed the effect of HASF hydrogel composition on the release of small hydrophobic anti-inflammatory and anabolic drugs, that had previously been identified as promising agents.": false,
|
||||
"Accordingly, we perform many experiments to demonstrate that the proposed method can be implemented on academic papers in any period after publication with a significantly higher degree of accuracy and robustness than the existing algorithms applied to new papers.": false,
|
||||
"And as the challenges faced by cities seem to become greater with time, the need for novel, critical, and creating approaches on how we could use the potential of play to improve urban life, foster sustainability, consolidate resilient and inclusive communities becomes even more urgent.": false,
|
||||
"While still at its infancy, we hope that the PCA initiative has the potential to serve as a nucleator, bringing together scientists and engineers from a wide range of fields to solve fundamental problems in plant biology with innovative solutions from emerging technologies.": true,
|
||||
"While markets can be understood in many different ways, we argue that a network perspective to markets, instead of a channel perspective, offers a promising entry point to reflect on a fruitful role that stakeholder involvement could play for the transition to a CBE.": false,
|
||||
"We will elaborate on the engineering potential of both liposomes and EVs to enhance favorable pharmacokinetic characteristics in order for these vesicles to function as effective drug delivery systems DDS.": false,
|
||||
"We will demonstrate how, through an ongoing process of reflexive innovation, our responses to the above questions have shifted and evolved, leading to a more sophisticated and diversified understanding of the well-being challenge.": false,
|
||||
"We show that within the context of our application, the FPGA accelerated implementation can achieve close to NUMBER GBs of parsing and conversion throughput when the accelerator host-to-device interface provides enough bandwidth and when enough FPGA resources are available.": false,
|
||||
"We show that this exact approach can solve instances with up to NUMBER customers to proven optimality, improving upon existing exact methods that can solve similar problems with up to ten customers only.": false,
|
||||
"We discuss necessary preconditions for successful development and implementation of eGovernment services in a multi-level polity and propose the following recommendations: firstly the EU needs to assess the potential impact of proposed eGovernment systems during the phase of policy development.": false,
|
||||
"We describe the implementation of spectral polarization modulation in a prototype satellite instrument, the SPEX prototype CITATION and in groundSPEX CITATION, which is specifically developed for ground based measurement.": true,
|
||||
"We conclude by identifying the most promising directions where advances in these material systems will enable progress in qubit technology.": true,
|
||||
"We achieve a better performance, in terms of robustness to catastrophic forgetting, than the state-of-the-art regularization and architectural methods using a fixed model capacity, outperforming the regularization methods by a big margin.": true,
|
||||
"To reach these goals, we need to continue the search for biomarkers addressing real clinical needs, to increase the number of prospective studies to show clinical benefits of the putative markers already known and to analyse the costs of using biomarkers in the clinic from a societal perspective.": false,
|
||||
"To ensure computational tractability, we develop a reduced-space formulation for trained one-class support vector machines and show that our formulation outperforms common full-space formulations by a factor of over NUMBER making it a viable tool for engineering applications.": false,
|
||||
"To address this research challenge, we pose the following research objective: To develop a method for the definition of business model key performance indicators KPIs catered to the characteristics of the business model innovation process to support business model decision making.": false,
|
||||
"Through our results, we have demonstrated that oxygen saturation imaging using a dual-wavelength LED-based photoacoustic system has potential in pre-clinical and clinical applications.": true,
|
||||
"The predicted melting points for these interatomic potentials are provided in Section NUMBER Note that our fully automatized approach allows to predict the melting point of any given interatomic potential with a very high numerical precision but not necessarily with high accuracy.": false,
|
||||
"The high variation in adenoidectomies might indicate a lack of agreement on indications for surgery, and our findings underscore the need for high-quality effectiveness research to improve evidence-based guidelines on this topic.": false,
|
||||
"The average share of manufacturing increased in all developing countries between NUMBER and In comparative perspective we observe a long-run increase in the shares of manufacturing in developing countries, and a long-run contraction in the shares of manufacturing in the advanced economies.": false,
|
||||
"Subsequently, in a comparison of our automated failure prediction models, we discovered that all four AI algorithms, RF, GB, LSTM, and GRU, that utilise combined system metrics or multimodal inputs outperformed the state-of-the-art studies.": false,
|
||||
"Recognizing that the total demand and demand flexibility may increase significantly in the future, we included a high share of electric vehicles to test the robustness of the market designs.": false,
|
||||
"Recently, we described the use of a high-throughput organ-on-a-chip platform, the OrganoPlate, for therapy response testing of breast cancer, showing the potential of the platform for three-dimensional tumor models and its application in assessing the resistance of cells to chemotherapeutic agents for personalized medicine CITATION.": true,
|
||||
"Our work demonstrates important progress in the implementation and performance of quantum optimization algorithms on a real device, and underscores the challenges in applying these algorithms beyond those natively realized by hardware interaction graphs.": true,
|
||||
"Our study demonstrates that asynchronous advantage actor-critic A NUMBER C, a deep reinforcement learning DRL method, can be successfully utilised to develop an autonomous trading agent capable of exploiting arbitrage opportunities.": true,
|
||||
"Our results show that the innovation voucher program has an immediate, short-term impact on the execution of these innovation projects with positive effects on product and service development, internal processes, and intellectual property protection.": false,
|
||||
"Our diagnosis approach not only provides a practical tool for managers to develop context-specific solutions to variability, its development also enables us to contribute important insights that strengthen the OM literature on flow improvement.": false,
|
||||
"Moreover, we are the first to explore the potential of two promising treatment strategies in the field of neonatal brain injury, i.e., intranasal MSCs and IGF NUMBER to restore interneuron deficits and improve sociability in our EoP mouse model.": true,
|
||||
"Importantly, Amsterdam and Paris already had highly-developed housing markets, and unique microlevel data survived in the archives of both cities, allowing us to track mortality and the developments in the housing market following an epidemic.": false,
|
||||
"For the future, we propose a model in which the DCRT is reimbursed by national payers for each successfully developed ASO, so these funds can then be invested in the development of new individualized ASOs for additional patients.": false,
|
||||
"Extensive experiments based on real-world datasets demonstrate that our approach achieves a high efficacy of detection performance against the state-of-the-art.": true,
|
||||
"Experimental results show that ArtSAGENet outperforms several strong baselines and obtains state-of-the-art performance in fine art analysis, while qualitative analysis of the representations learned by our approach indicates that it is capable of capturing interesting properties of fine art.": false,
|
||||
"As genome-scale computational modelling of underground metabolism successfully predicts the potential to utilize new nutrient sources in E. coli CITATION, we reasoned that a similar approach could be employed to characterize the theoretical potential of underground reactions to produce industrially relevant chemical compounds.": false,
|
||||
"As concerns the role of mobile phones for the displaced in particular, the United Nations High Commissioner for Refugees has stated that, a connected refugee population can play a critical role in enabling organizations such as UNHCR to innovate effectively and to improve the quality of services that we provide.": false,
|
||||
"Addressing this gap is beneficial at least in two respects: it allows us to look, for the first time, into technology commercialization and the context specific factors that affect it in Iran; it helps us to see how commercialization boosting policies work in a developing country under economic sanctions.": false,
|
||||
"Additionally, we examined whether paternal characteristics could improve model performance of the developed prediction models within a subgroup of our population and we examined the predictive performance of the developed prediction models on secondary maternal, delivery and neonatal complications.": false,
|
||||
"We presented a particular method to generate NUMBER D engineered cultures for the first time with human-derived neurons coupled to MEAs, overcoming some of the limitations related to NUMBER D and NUMBER D neuronal networks and thus increasing the therapeutic target potential of these models for biomedical applications.": false,
|
||||
"To build on these promising results, the development and use of CM optimization techniques, for example similar to the recently developed framework by CITATION NUMBER are important for identifying the most promising combinations of scaffold properties.": false,
|
||||
"Subsequently, in we discuss redirecting enforcement towards the demand side of the market and inquire whether certain practices by employers may be condemned as antitrust infringements when they harm competition in labour markets and whether this approach can contribute to addressing the concerns addressed here.": false,
|
||||
"While the preponderance of evidence from previous studies identifies supply chain complexity as detrimental to firm performance, our results illustrate that although supply chain complexity has a negative effect on operational performance, it has a positive effect on innovation performance and financial performance.": false,
|
||||
"Whereas the Prototypical Part Network ProtoPNet CITATION presents a user a large number of prototypes, our novel architecture with end-to-end training procedure improves interpretability by arranging the prototypes in a hierarchical tree structure.": false,
|
||||
"Well known businesses like Lufax, Flipkart, Snapdeal and Lianjia represent examples of Unicorn companies born in China and India with a market value of over NUMBER billion US dollars, thereby attesting to the potential of emerging markets on giving birth to fast growing start-ups.": false,
|
||||
"We argue that besides improving the quality of the provided diagnostics, allowing some tolerance in deviations assessment also enhances the flexibility of conformance checking techniques and, indirectly, paves the way for improving the resilience of the overall process management system.": false,
|
||||
"Using a case study on agricultural diversification in the former homeland of Venda, South Africa, we explore the usefulness of the nested markets concept to make sense of smallholders' patterning of markets by combining tree crops for export with seasonal vegetables for local markets.": false,
|
||||
"To this end, we propose an integrated dynamic market mechanism which combines the real-time market and frequency regulation, allowing competitive market players, including renewable generation, to negotiate electricity prices while using the most recent information on the grid frequency.": false,
|
||||
"To demonstrate the clinical potential of a robust functional parcellation of the PAG, we propose an exploratory application that can be used to study connectivity changes between different subregions of the PAG related to changes in bladder fullness and bladder sensations.": false,
|
||||
"The NUMBER D organoid systems that we describe in this review CITATION represent a promising platform to further understand the neuropathology of PKU by providing tools to specifically address PKU-related targets and modulate key aspects of oxidative stress, brain L-Phe clearance, neurotransmitter deficiencies and LNAAs brain uptake.": false,
|
||||
"Our studies highlight, for the first time, the therapeutic potential of Epac NUMBER inhibition in hippocampal neuronal cells, and the importance of developing new pharmaceuticals to treat neurodegenerative diseases.": true,
|
||||
"Our results show that both approaches improve performance in the basal and apical regions, although only the classification and segmentation approach produced significantly better results across all labels and datasets.": true,
|
||||
"Our research shows that the concepts serve distinct purposes at different stages of the business model innovation process, and we discuss these findings and their broader implications for the literature on business model innovation and for innovation management practices in B NUMBER B companies.": false,
|
||||
"Our research is situated within these debates, drawing attention to the development-led aspects of planning processes tied to density bonusing, emphasizing its ascent over the past NUMBER years from a development control to development enabling policy.": false,
|
||||
"Our findings suggest that the market reacts positively to a switch to exploration, which signals that the firm is ready to engage in high-quality innovation, once it has completed a series of exploitative acquisitions to build the slack necessary to fund it.": false,
|
||||
"Motivated by recent market developments and the potential of elastic CDNs, we proposed the new problem of dynamic cache rental, file caching and user association for wireless edge caching networks.": false,
|
||||
"Moreover,the possibility to identify the inhibitory selectivity among endogenous LOX isoenzymes will facilitate our understanding of LOXinhibition and will thus facilitate drug discovery.T herefore,w ea im to develop novel tools to investigate the activity of endogenous LOXi soenzymes to advance LOX-oriented research and drug discovery.": false,
|
||||
"Moreover, we present the potential of these applications in cardiovascular and cardiothoracic medicine, and additionally, we will provide key facilitators, challenges, and recommendations to adopting these technologies in clinical practice.": true,
|
||||
"Moreover, we demonstrated the positive impact of generated answers on the performance of the retrieval model of the conversational search system, as the performance significantly increased when the answers to clarifying questions were taken into account.": false,
|
||||
"In this review, we will address the progress that has been made using non-ribosomally produced peptides and ribosomally synthesized and post-translationally modified peptides as scaffolds for designed biosynthetic pathways or combinatorial synthesis for the creation of novel peptide antimicrobials.": false,
|
||||
"In particular, our numerical studies for the Le Mans race track indicated that the lap time of a CVT-equipped electric race car can significantly outperform the one achievable with an FGT, as a CVT can counteract its higher mass with a more effective motor operation, although strongly dependent on the powertrain design choices.": true,
|
||||
"In doing so, we are able to illustrate how new actors-in this case the European Commission and the Commissioner for Competition-were able to terminate long-existing policies of state aid to shipbuilders under the auspices of improving competition and the free market at the start of the NUMBER s.": false,
|
||||
"In addition, we find that our proposed unsupervised method significantly outperforms the state-of-the-art baselines in cross-lingual knowledge selection.": true,
|
||||
"Here, we show that with the proposed implementation, and by selectively making the proposed simplifications, as well as selectively choosing the grid parameters, a model can be obtained that has a minor impact on model accuracy, achieving a simulation time of over NUMBER times faster than real-time.": false,
|
||||
"Due to the promising application of highly rigid anionic liposomes in the field of antigen-specific tolerance and the need for methods to efficiently load tolerogenic adjuvants, we developed a microfluidicsbased approach.": true,
|
||||
"Consistently with previous work, we found that the use of InSAR coherence leads to a significant improvement of the classification performances, for example, with improvements in the user accuracy for most classes considered in the order of NUMBER p.p.": true,
|
||||
"As intensive operations are to be performed on sensors, we demonstrated the feasibility of such a construction by implementing a proof of concept while using a resource-constrained device as a sensor.": false,
|
||||
"Although we expect our findings to be generalizable to other creative industries, it would be interesting to extend this research to investments in start-ups in non-creative industries, focusing on key serial entrepreneurs CITATION with the CEO and the CTO role e.g. the software industry or the CEO and the CSO role e.g. the biotech industry.": false,
|
||||
"We suggest that future studies further investigate the potential of these techniques for the improvement of freshwater invertebrate detection and abundance estimation, which might eventually lead to a robust application of DNA techniques for a total freshwater census.": false,
|
||||
"We report the potentialities and pitfalls of one of the first commercially available devices capable of recording brain local field potentials LFPs from the implanted DBS leads, chronically and during stimulation.": false,
|
||||
"We propose a novel network data envelopment analysis NDEA model, capable of setting store-level performance standards more accurately than state-of-the-art models.": true,
|
||||
"We hypothesize that an enabling design and an enabling development process, as compared to a coercive design and a coercive development process, lead to perceptions of greater procedural fairness and less red tape.": false,
|
||||
"We hope to discover which virtual environment design aids the performance of both the sexes, thus establishing a framework for designing virtual training environments and possibly GPS-based navigation systems that successfully comply with the both sexes, without impairing the performance of either one.": false,
|
||||
"We expect future developments in machine learning and optimization together with novel fabrication techniques to lead to unprecedented nanotechnology within the next decade.": true,
|
||||
"We demonstrated that the proposed idea can improve the performance of the baseline DeepLabv NUMBER by about NUMBER in mIoU sense on two of the most modern and commonly-used datasets PASCAL VOC NUMBER Cityscapes while boosting the performance in certain classes up to NUMBER without introducing any extra delay at inference.": false,
|
||||
"We demonstrate the successful development of a realtime data infrastructure that enabled both data-driven care and decision making and rapid answering of critical clinical questions during pressing times, such as the COVID-NUMBER pandemic.": false,
|
||||
"We believe that, with the relentless advances in scalable manufacturing techniques such as cutting, casting, and coating, findings from this study can facilitate the development of multitech combined devices, that is, photovoltaic-thermoelectric PV-TE coupling system which to date is still at its infancy stage.": false,
|
||||
"To understand this innovation gap, we reviewed the literature to describe the potential of AMPs as alternative to antibiotics and the challenges toward clinical application of AMPs.": false,
|
||||
"To that end, we developed a novel asynchronous arm-crank ergometry platform for use in a clinical magnetic resonance MR scanner with NUMBER P spectroscopy capability to study arm muscle energetics.": true,
|
||||
"Therefore, addressing the psychological patient factors found in our study preoperatively might lead to low-cost interventions to improve return to work after The graphs show the HRs for a simulated patient in which the baseline characteristics are fixed CITATION.": false,
|
||||
"Said differently, even if the focal firm may shy away from acquiring a larger target due to the fear of retaliation, some degree of synergies and gains in market power can also be achieved by acquiring a smaller firm, especially if we consider acquisitions within the same industry.": false,
|
||||
"Our results indicated that the combination of an open innovation contest and design thinking could, through the creation of constant feedback loops, lead to increased collaboration between the contests participants, the companies proposing a challenge, and other relevant stakeholders.": false,
|
||||
"Our novel method provides a simple way to produce customized NUMBER D ultrathin fibrous scaffolds, with great potential for TE applications, in particular those for which anisotropy is of importance.": true,
|
||||
"Our findings are promising as they point to the potential of LKM and self-compassion to serve as a practically attainable way for entrepreneurs to develop resilience and more effectively cope with entrepreneurial fear of failure.": false,
|
||||
"Novel prospective research should include trials investigating the efficacy of CBT-I for patients with previously under-investigated comorbidities, the efficacy of adaptations of the CBT-I protocol compared to the standard protocol, follow-up periods longer than NUMBER mo, and the potential of CBT-I for the prevention of mental disorders.": false,
|
||||
"Motivated by our experimental findings that the quality of the information passed to the central system through final orders is significantly higher when the uniform allocation principle is applied, we propose a new application of the uniform principle that has several attractive properties in this setting.": false,
|
||||
"In this communication we investigate a novel facile and fast nebulization method with a continuous jet atomization device to nebulize formulations at a throughput well over NUMBER mL min with a minimum amount of shear stress enabling a large window to formulate lipid based nanoparticle drug carriers CITATION.": true,
|
||||
"In summary, we have developed novel divergent syntheses of NUMBER yaequinolone-related natural products, which are synthesized for the first time, by late-stage C-H olefination of NUMBER dioxygenated NUMBER aryl-NUMBER hydroxyquinolin-NUMBER NUMBER H-ones, core structures of this family of natural products.": true,
|
||||
"In our study, we find further heterogeneity across workers with a different job-skill CITATION complementary of human capital investments and NUMBER the multiplier potential of these investments for their skill development.": false,
|
||||
"In conclusion, we have demonstrated an integrated MWP signal processor using a network of three RRs in a single photonic chip that spectrally shape the PM spectrum, for the first time, to the best of our knowledge, to create a MWP notch filter with a high stopband rejection and enhanced filter performance.": true,
|
||||
"In Section NUMBER we demonstrate the potential of extending the proposed design to develop latticebased shells.": false,
|
||||
"Furthermore, while scholars have accumulated knowledge about innovative behavior in business contexts where innovation is nurtured, to fully understand'innovation by employees' we need to also address business contexts where innovation by employees is not overtly expected.": false,
|
||||
"Finally, we will propose potential developments that may help to improve the performance of current devices.": true,
|
||||
"Finally, we describe three potential randomized registrybased clinical trials in an adjuvant setting and for advanced disease with a high potential to be executed within the framework of an advanced ENSAT registry.": false,
|
||||
"By connecting several junctions, we can study effective NUMBER spin systems demonstrating the potential of our approach for analog spin-glass simulation.": false,
|
||||
"Both European and US experts NUMBER , NUMBER have emphasized the need for preclinical studies in the animal, for testing various methodologies to produce RDN lesions, evaluating safety and efficacy of novel RDN systems, developing various biomarkers and assessing potential non-blood pressure related benefits.": false,
|
||||
"As a proof of concept, we further discuss a prototype implementation for supporting future-based data streams on top of ABS, and discuss the impact of the use of these data streams in ABS on the performance in the implementation of a distributed application for the generation of social networks.": true,
|
||||
"Although models learned on sparse annotations achieve relatively lower accuracies than those using dense annotations, we show that using a semisupervised deep learning approach can help to close this performance gap while leveraging sparse annotations that can significantly reduce the costs of label generation.": false,
|
||||
"Addressing how to achieve community-based solutions in a malaria elimination trial in The Gambia, we developed the Community Lab of Ideas for Health CLIH: a participatory approach that enabled communities to shape trial implementation.": false,
|
||||
"Using a large panel of innovative firms in the Netherlands, this study shows that partner type diversity in a firm's alliance portfolio has an inverted U-shaped relationship with productivity and radical innovative performance and a positive relationship with incremental innovative performance.": false,
|
||||
"For the deployment of our prototype, we have chosen Amazon Web Service AWS IoT and its extension for edge computing i.e., Greengrass as the baseline IoT platform as it is one of the more mature IoT platforms available on the market and provide the machinery necessary for the realization of the defined deployment models.": false,
|
||||
"We summarized pre-clinical and clinical studies investigating whether physical exercise would improve muscle performance and whether this improvement would translate in a clinically meaningful benefit for patients with cancer, in terms of survival and quality of life.": false,
|
||||
"We then chose the most effective EO to continue with further tests using exposure to the treated oilseed rape plant surface as the method of exposure, expecting to find an effective concentration threshold for significant insecticidal efficacy.": false,
|
||||
"We show that LMX mediates the association between SDT and team performance and innovation as rated by team members, while collective narcissism mediates the association between SDT and supervisory ratings of team innovation and team performance.": false,
|
||||
"We propose a sample average approximation with importance sampling and pruning of dominated activities to solve the problem, and demonstrate that this method solves large instances quickly.": false,
|
||||
"We present a reliable, yet stable time-domain implementation of MDD that includes physical priors as a mechanism to improve kernel conditioning by transforming the model vector into a domain where the ill-posed nature of the inverse problem is significantly mitigated.": false,
|
||||
"We hope that the following chapters will provide the reader with many novel insights into the complex interaction between nutrition and exercise, allowing them to define more effective dietary strategies to improve health and performance.": false,
|
||||
"We find that while the decoupling method leads to an acceptable and convergent effective potential, the method does not solve the fine-tuning problem that is inherent to the hierarchy problem of multiple-scale theories.": false,
|
||||
"We find that contrary to popular belief, contracting has positive and significant impact on malt barley production, intensification, commercialization, quality improvement, and farm gate prices, ultimately resulting in increased net income and spillover into the productivity of other food crops.": false,
|
||||
"We experimentally show that, for the unknown disturbance situation at hand, the variable-gain controller can be automatically tuned using both ESC approaches to achieve the optimal system performance.": false,
|
||||
"We evaluated the assessment tool in two online studies-with participants in their own homes completing the task on their own digital devices-to show that the assessment tool can significantly predict scores from the Patient Health Questionnaire CITATION-a standard self-report tool for assessing depression in clinical contexts.": false,
|
||||
"We discover significant differences between middle slices and both basal and apical slices after training a state-of-the-art segmentation model on a large clinical dataset CITATION and testing it on three independent test datasets.": false,
|
||||
"We conducted interviews with NUMBER solo diners to investigate their experiences while eating alone, their motivations for using an ICT device, as well as the potential of such devices to contribute to healthy eating practices.": false,
|
||||
"We agree that there is a need for further research into the mechanisms of co-existence of cancer and comorbid diseases and the need for development and application of comorbidity assessment and management tools that are validated in the younger cohort.": false,
|
||||
"To this end, we propose a novel online market mechanism, EdgeDR, to achieve cost efficiency in edge demand response programs.": true,
|
||||
"To provide platform leaders with advice on how to create a sustainable digital platform, we examine how retail store activity on the digital platform affects consumer activity, and vice versa also known as cross-side network effects.": false,
|
||||
"To overcome this problem, we developed perfusion fixation methods for needle and wedge biopsies, NUMBER which significantly improved the preservation of the sinusoids, sinusoidal cells and endothelial fenestrae, enabling high resolution transmission electron microscopy TEM of all hepatic cell types in human liver biopsies.": true,
|
||||
"To demonstrate the model potential, we tested our platform at an immature NUMBER days in vitro and mature state NUMBER days in vitro of development.": false,
|
||||
"To address these clinical challenges, we have developed a bilayered, modular hydrogel system that enables the click functionalization of cartilage-and bone-specific biochemical cues to each layer.": true,
|
||||
"Third, on the basis of our first two hypotheses, we hypothesize that individual stakeholders observing a stakeholder-oriented firm will show more moral consideration for other stakeholders than individual stakeholders observing a profit-oriented firm, mediated by individual stakeholders' humanization of other stakeholders.": false,
|
||||
"Taken together, we not only provide a proof of concept by development of inhibitors to target disordered proteins, but we also provide novel technologies and simple methods to develop inhibitors for IDPsIDPRs.": false,
|
||||
"Recently, we have demonstrated on trapezia that the image quality of the CBCT device NewTom NUMBER G Cefla, Italy CITATION can be enhanced to reach an accuracy comparable to HR-pQCT in quantifying bone trabecular parameters CITATION.": true,
|
||||
"Our results show that LMX mediates the association between SDT and team performance and innovation as rated by team members, while collective narcissism mediates the association between SDT and supervisory ratings of team innovation and team performance.": false,
|
||||
"Our results demonstrate the potential of combining MB and DD methods in autonomous systems, while providing a proof of concept for KalmanNet in a challenging real-life scenario.": true,
|
||||
"Our research highlights the importance of developing a holistic picture of the mechanisms by which different signals of product quality affect consumption and decision-making in entertainment markets, considering simultaneous exposure to a range of market signals instead of considering different factors independently.": false,
|
||||
"Our findings reinforce the elevated potential of the Brazilian large families in revealing novel candidate genes or mechanisms of mutation leading to hearing loss.": false,
|
||||
"Our current findings have the potential to inform assessment of clinical reasoning performance in authentic e.g. Such work could also advance our understanding of context specificity, which leads to unwanted variation in physician performance.": false,
|
||||
"Now data are produced at a rapid pace that enables firms to analyze the effectiveness of potential CE relationships between firms, we are motivated to study how information systems can also facilitate circular decision making.": false,
|
||||
"Moreover, we analysed the combinatorial activity in a newly designed ex vivo bacteraemia model as well as the potential of the best combination peptide D-NUMBER with rifampicin to treat K. pneumonia e infections in vivo in a mouse abscess infection model, demonstrating effective clearing of the infection.": false,
|
||||
"More broadly, we point to significant opportunities from applied linguistics and big data analytics for the development of novel indicators to track tangible and intangible dimensions in the geography of innovation.": false,
|
||||
"Many supramolecular systems are complex to synthesize or to selfassemble into functional architectures, yet with progress we increase scalability as well as the simplicity of the architectures and the robustness of the self-assembly process.": false,
|
||||
"Lastly, we believe there is a dire need of additional clinical benchmark data-sets to improve upon the state-of-the-art in this area.": false,
|
||||
"In summary, we propose that Gibbs energy released during catalysis can be harnessed by enzymes in the form of work, which will ultimately lead to an enhancement of their effective diffusion Fig NUMBER A.": false,
|
||||
"In conclusion, we have developed a novel genetic adjuvant that for the first time employs the pyroptosis pathway to improve DNA vaccination against cancer.": true,
|
||||
"In chapter NUMBER we sought to develop a novel flow-cytometry-based high-throughput method that allows quantitation of the agglutinating potential of anti-pneumococcal antibodies.": true,
|
||||
"In addition, we discuss the clinical potential of TEVs as markers of cell state transitions including the acquisition of a treatmentresistant phenotype, and their potential as therapeutic targets for interventions such as the use of extracellular vesicle EV inhibitors to block their pro-tumoral activities.": false,
|
||||
"In addition, we discuss the clinical applicability of therapeutic ultrasound with respect to the main challenges that must be addressed to enable the further progression of therapeutic ultrasound towards an effective, safe and easy-to-use treatment tailored for drug delivery in patients.": false,
|
||||
"If we want to facilitate standardization in OoC by the development of an open platform, it will be essential that the platform finds widespread support.": false,
|
||||
"If we know how to quickly select the optimal or close to optimal trigger injecting position in backdoor attacks on GNNs, we can achieve high attack performance and good evasion of the defender's detection mechanisms.": false,
|
||||
"HTP in clinical decision making: Seven problems that occur in daily clinical practice are described and we show how HTP can enhance insight to formulate an adequate treatment strategy.": false,
|
||||
"Given advancements in mobile technology, an effective-CBT-I app could offer an opportunity to enhance the advantages and coverage provided by other formats of CBT-I, enabling real-time and personalized monitoring, assessment, and interventions CITATION.": true,
|
||||
"Finally, we use all the knowledge we acquired to propose recommendations for practitioners i.e., how they can use the findings of this paper to improve their testing skills, tool makers i.e., a list of tools that would improve the way developers do testing, and educators i.e., testing topics that should be taught at university-level.": false,
|
||||
"Finally, we suggest that B NUMBER B innovation practitioners adopt the stakeholder engagement journey as a process tool that links service design to innovation stages.": false,
|
||||
"Finally, we develop a Frank-Wolfe algorithm that can solve this convex program orders of magnitude faster than state-of-the-art general purpose solvers.": true,
|
||||
"Comparing with state of the art in localization, we demonstrate the superiority and robustness of the performance of FEEL.": true,
|
||||
"CONCLUSION: Our work NUMBER demonstrates the potential of our previously developed automated quality assurance methods to NUMBER generalize to external datasets.": false,
|
||||
"By elucidating the nature of the PD as a function of the potential, we can explain the universally observed bell-shaped curve for the FECO as a function of potential in relation to the effect of PD, cation concentration, and mass transport on the rate of the competing HER.": true,
|
||||
"As we have already discussed, convergence of leader and follower views with regard to their LMX quality will lead to increased development opportunities and career resources that can contribute to the follower's learning and growth, employability, and marketability.": false,
|
||||
"As a proof-of-concept, we develop a data-driven AI-based service scaling prototype to automate the service scaling operation to meet the service requirements while minimizing the consumption of resources.": true,
|
||||
"Applied to gold medal-winning parameterized SAT solvers, we show that our approach can produce significantly better-performing SAT solvers than state-ofthe-art parallel solvers constructed by human experts, reducing time-outs by NUMBER and running time PAR NUMBER score by NUMBER under competition conditions.": false,
|
||||
"Accordingly, we expect institutional investors to affect the implementation of strategy uniqueness, since they relate to both the type of investor putting the most pressure on CEOs CITATION, and also to the type of investor being best equipped to provide good monitoring and governance CITATION.": false,
|
||||
"A remarkable result in our model is that competition in the healthcare market does not necessarily improve care quality, which differs from previous literature.": true,
|
||||
"These encouraging data suggest that the novel enzyme and strain engineering approach represent a promising platform for the clinical development of CDEPT.": true,
|
||||
"As the paintings conservation field has rapidly discovered the potential of Evolon CR for varnish removal from oil paintings, the need to advance our understanding of this material and the steps necessary for safe and optimal usage increases.": false,
|
||||
"According to these latest concepts of clinical translation, we firmly believed that the a-TOS married NUMBER D MoS NUMBER as a promising theranostic platform can be employed to achieve the compelling efficacy and safety benefits for cancer theranostics.": false,
|
||||
"With great interest we read the article by CITATION CITATION, in which they demonstrate the potential of home monitoring to reduce hospital admissions by safely surveying clinical symptoms and vital parameters.": false,
|
||||
"While we showed how this may be effectively conducted for hard-sphere models, further research is needed to develop effective implementations for perfect sampling from a broad class of Gibbs point processes.": false,
|
||||
"While our work suggests potential for developing a SIGS approach for implementation in B. aeneus management, further experiments are needed to more fully explore the potential for incorporating this approach.": false,
|
||||
"We show that the proposed approaches compare favorably to several standard and state-of-the-art imputation methods in terms of predictive performance and runtime.": true,
|
||||
"We proceed by rigorously establishing limitations and unprecedented merits of this controller, further proposing appropriate modifications that guarantee improvements in terms of stability, robustness, and performance.": false,
|
||||
"We introduce an attention-based sequence-to-sequence OIE model that outperforms state-of-the-art network architectures, hereby demonstrating its effectiveness in information extraction tasks.": true,
|
||||
"We have developed a translation of CSX to SMT constraints which enables us to use constraint solving to find optimal configurations for finishers.": false,
|
||||
"We have demonstrated the potential of MCR chemistry by utilizing this privileged scaffold of proven interest in materials science and drug discovery.": true,
|
||||
"We first show that disjoint bilinear optimization problems can be cast as two-stage robust linear optimization problems with fixed-recourse and right-hand-side uncertainty, which enables us to apply robust optimization techniques to solve the resulting problems.": false,
|
||||
"We find that inventory allocations between the high and the low value channel are significantly different from optimal independent of whether profit differences between channels are high or low what we call profit conditions.": false,
|
||||
"We encourage researchers to investigate the usability, acceptance, feasibility, reliability, and clinical validity of wearable sensors in clinical populations to facilitate the application of wearable movement sensors in motor rehabilitation.": false,
|
||||
"We do believe that our general findings-that organizations' capacities and perspectives, embeddedness in a wide network, and other development work create multiple forms of representation, which may contribute to inclusive development-have the potential to form a starting point for this further research.": false,
|
||||
"We discuss implications for further adaptation of annotation tools, and the potential for deriving reference data from such rich annotation datasets for the evaluation of automatic pattern discovery algorithms in the future.": false,
|
||||
"We demonstrate experimentally for the first time that the proposed soft handover mechanism enables the seamless transmission to the mobile UD in the BS-ILC system.": true,
|
||||
"We conduct three sets of studies to demonstrate the potential of the proposed pseudonymization approach: NUMBER First, we validate the proposed approach through ABX pilot tests.": true,
|
||||
"We conclude that this form of data regime competition between China and the EU can give China an advantage in terms of promoting innovation in the electric car industry.": false,
|
||||
"We conclude that existing genetic risk scores can already improve life insurance underwriting, which stresses the urgency of policymakers to balance competing interests between stakeholders as this technology develops.": false,
|
||||
"We conclude it is important that all centres use an adequate, preferably uniform, registration system on innovation indicators and propose to select the system we used because it has been developed and approved by the sector itself.": false,
|
||||
"We argue that to advance service design opportunities for stakeholder engagement, we need to address the unique complexities and challenges of stakeholder engagement during innovation from a systemic and dynamic process perspective.": false,
|
||||
"We address this challenge by proposing alternative tariff designs, in terms of variable and fixed charges together with PV installation cost subsidies, that a regulator can implement to achieve a minimum solar energy target while guaranteeing network financing.": false,
|
||||
"Upon application of an RG step, the new effective local Hamiltonian that we find inside the causal cone will be renormalized to new effective couplings Ja', Jb', which correspond to effective lattice points A', B', respectively.": false,
|
||||
"To utilize the full potential of-omics driven biomarkers discovery studies, it will be essential to reach agreement on the best outcome reference standard in future studies, and we propose our diagnostic phenotyping algorithm as the best possible way to do so at present.": false,
|
||||
"To help address this need, our interdisciplinary team of clinicians, social scientists, bioethicists, designers, and computer scientists developed an innovative ICT framework for knowledge generation in chronic-pain research.": false,
|
||||
"To address this key gap, we broaden the theory of problemistic search for innovation by proposing a digitally enabled collaborative problemistic search CPS capability.": true,
|
||||
"To achieve a high level of UX, we address these user needs by introducing an interactive car door that enables passengers to explore the landscape in a more detailed and informative way using AR on the side window and a touch-sensitive door panel.": false,
|
||||
"This demonstrates the practicality of our study: we believe that researchers can build upon our work's findings by creating improved compiler validation methods and tools.": true,
|
||||
"These findings echo themes in how to improve humanitarian operations more generally, suggesting that finding effective ways to address these enduring challenges may significantly increase effective multi-hazard planning and response.": false,
|
||||
"The discovered effect is further confirmed by comparing the measurements to an advanced numerical model that we have developed earlier CITATION, with further implementation of the free-boundary conditions, showing excellent agreement to the measured data.": false,
|
||||
"Specifically, we extend the literature on social exchanges during opportunity development CITATION, NUMBER; by describing how entrepreneurs make sense of critical feedback from their stakeholders and by compiling the cognitive changes from novel sensemaking.": false,
|
||||
"Since our founding in NUMBER we have developed visualisation tools in our lab, deploying a number of immersion devices across a diversity of data sets and platforms CITATION, as well as across disciplines CITATION.": false,
|
||||
"Second, to improve the performance of MetaVC on large MinVC instances, we introduce a neural-network-based approach to enhance automatic configuration.": false,
|
||||
"Our study provided initial and promising evidence for the psychometric properties of the Italian version of a newly developed tool to measure burnout, namely the Burnout Assessment Tool, which intends to overcome some of the conceptual, methodological and practical limitations of the MBI.": true,
|
||||
"Our study demonstrated that the framework we conceived of IMSI and SDT can effectively be applied as a frame of analysis to identify essential features of sustainability in educational innovations.": false,
|
||||
"Our speed-accuracy trade-offs and effective spatial-contextual feature fusion allow us to outperform the previous state-of-the-art approaches for real-time semantic segmentation on two public datasets, namely Cityscapes dataset CITATION and UAVid dataset CITATION.": true,
|
||||
"Our results have demonstrated the feasibility and the great potential of on-chip SD-OCT systems.": true,
|
||||
"Our findings suggest that as nutrient availability increases under future climatic conditions, subarctic shrubs will develop increased resistance to biotic and abiotic stresses under rising temperature as opposed to under increased cloudiness, which could lead to decreased resistance.": true,
|
||||
"Our findings showed that these biomimetic micro-patterned substrates enabled cell disposal along architectural directions, thus appearing as promising substrates for developing functional TM replacements via TE.": true,
|
||||
"Only if the user knows how to integrate decision support tools into the complex tasks clinical judgement and decision-making we are able to test the full potential of these tools.": false,
|
||||
"Moreover, from our analysis, we conclude that the network assistance provides significant performance improvement, especially when the clients with identical interests compete for a bottleneck link's capacity.": false,
|
||||
"More interestingly, we find that using Bayesian shrinkage priors leads to superior out-of-sample performance for long-term investors.": true,
|
||||
"Merging findings with strands of social movement theory CITATION, I argued that state-funded sites of adult education in francophone Belgium demonstrate the potential to create empowering linkages to social movements.": false,
|
||||
"Introduction Our aim is to develop a novel approach to hyperkinetic movement disorder classification, that combines clinical information, electromyography, accelerometry and video in a computer-aided classification tool.": true,
|
||||
"In this work, we present numerical tools to explore such nonequilibrium effects in spatially confined three-dimensional systems with a variable disorder potential, giving exact solutions to leading order in the disorder potential and the applied electric field.": true,
|
||||
"In this review, we describe the application of several imaging techniques in the clinical practice of BM management, and the promising new developments that lie ahead.": false,
|
||||
"In this paper, the development and application of a public-client-led method is investigated that enabled the development and implementation of a radical green innovation in a civil engineering project.": false,
|
||||
"In this article, we showed that exploiting such information in a GBO setting, specifically one that allows for partial evaluations, can lead to substantial improvements in performance and scalability.": false,
|
||||
"In the past NUMBER years as a result of advances in hardware and software, DSS research has advanced dramatically, which has revealed the potential of this approach to substantially improve clinical care.": true,
|
||||
"In the next step of research, we can use deep learning to automatically extract the features of sound and images, and further improve the detection accuracy and generalization of the AVF method and we can also use better experimental platforms and equipment to improve the real-time performance of our algorithms.": false,
|
||||
"In supplementary fig. NUMBER we demonstrate initial feasibility Deep-ULM in clinical practice, by performing inference on clinical CEUS measurements of a patient's prostate using a standard ultrasound system Philips i CITATION in combination with a standard transrectal probe.": false,
|
||||
"In section NUMBER we propose our model for extracting needs from customer reviews; preliminary evaluation results appear in section NUMBER We revisit the need for needs in our discussion and conclusion.": false,
|
||||
"In line with Clarke and Crane's NUMBER definition of systemic change, therefore, we define transformative change as the result of actions that lead to a significant alteration a transformation within a system, potentially leading to substantial impacts involving economic, social, and ecological issues.": false,
|
||||
"In conclusion, we showed that bimiralisib gel NUMBER for topical use leads to I meaningful cutaneous drug levels, II well-tolerated systemic drug exposure in patients with MF and III a lack of clinical efficacy.": false,
|
||||
"If effective at improving lifestyle behaviors, this approach could be an important measure for all women with overweight or obesity with the potential to improve clinical outcomes for these women who are in the preconception period and are at high risk for pregnancy complications.": false,
|
||||
"However, we do suggest companies mix other adaptive innovation models such as agile development CITATION or the hybrid Agile-Stage-Gateapproach CITATION with their NPD processes to mitigate the negative effects of innovation process formality.": false,
|
||||
"However, the advantages of high avidity and the possibility of modulating their circulation time mean that MMIAs hold great potential, as revealed by clinical trials such as those for NUMBER I-cRGDY-PEG-C dots CITATION.": true,
|
||||
"Here we review the pharmacology of fevipiprant, the oral DP NUMBER receptor antagonist that reached the most advanced state of development to date in a worldwide Phase III clinical trial programme; however, the demonstrated efficacy did not support submission.": false,
|
||||
"Hence, by adding the temporal analysis to our DML framework, we help the system to discover higher semantic movements that enhance the discovery of discriminative personality patterns, and therefore, improve the personality recognition task.": false,
|
||||
"Furthermore, we extend existing findings on innovation vouchers that are limited to a narrow scope in terms of industry, type of collaboration partner and region CITATION by making use of a large-scale field experiment to test the effectiveness of a nationwide, all-industry program with a broad scope of potential partners.": false,
|
||||
"From the current literature, we incorporate two theoretical perspectives within the dynamic capability framework to explain how corporations achieve sustainable competitive advantages: organizational ambidexterity and open innovation CITATION.": false,
|
||||
"First, we develop a model that captures how family social capital is enhanced by shifting the level of analysis from the family business to the enterprise family CITATION.": false,
|
||||
"Finally, we will present some perspectives on future multidisciplinary clinical and experimental research to develop new, more effective sleep therapies to improve both sleep and PTSD.": true,
|
||||
"Finally, we propose a series of recommendations that should be applied to polyester clothing at all stages along the value chain, offering the potential for meaningful and effective change to improve the environmental sustainability of polyester textiles on a global scale.": false,
|
||||
"Finally, our work shows a systematic road toward the development of accurate effective patchy particle potentials.": false,
|
||||
"Finally, by prototyping real-life applications on both FPGA-based MPSoCs and desktop multi-core platforms, we demonstrate that mapping the alternative application specification results in a large performance gain compared to those approaches, in which alternative application specifications are not taken into account.": false,
|
||||
"Endovascular innovations such as steerable sheath technology, our continuously evolving technical skills, and development of dedicated mating stents for fenestrations have the potential to improve technical success and durability of this OTS device in the near future.": true,
|
||||
"Earlier reports developed by our group demonstrated that the spontaneous AsIII oxidation by granular activated carbon GAC combined with the biological FeII oxidation led to the precipitation of biogenic scorodite in batch experiments CITATION,providing a promising green strategy for the removal of arsenic from acidic wastewaters.": true,
|
||||
"Development of in situ and operando XPS techniques that can completely overcome the pressure gap is underway, and we believe it will lead to cornerstone advancements in understanding metal-support interactions in catalysis CITATION.": false,
|
||||
"CITATION Arguing for the potential of an indisciplinary space of action to facilitate \"democracy of experience\", CITATION we seek to develop a non-hierarchical design research that leads into the'de-compartmentalization of each discipline'.": false,
|
||||
"By performing detailed assessments of the predictive performance for the question pattern and content tasks, we ind that CNQG enables us to produce accurate patterns and semantically relevant topics, which provides an explanation for its strong performance.": false,
|
||||
"By carefully tweaking the imprinting parameters, we were able to increase the number of imprints on our chips, validated by SEM and fluorescence microscopy, leading to an improvement of the LoD by an entire order of magnitude for the thermal sensing platform.": true,
|
||||
"Because we have shown that a substantial number of essential developmental genes are significantly downregulated upon SON haploinsufficiency, SON thus represents a master regulator of genes essential for human neurodevelopmental processes.": false,
|
||||
"As an outlook, here, we formulated a proposal for a design concept that allows us to connect cultured nervous system tissues in a platform that will enable the detailed study of PD by NoCs as it is envisaged in the CONNECT NUMBER project as well as other devastating nervous system diseases.": false,
|
||||
"As a consequence, we were able to successfully improve the efficiency of speaking based learning using an adaptive system: Learners who studied using the response time-based SlimStampen algorithm produced faster responses with NUMBER percentage points higher accuracy compared to learners who used the accuracy-based Leitner learning algorithm.": false,
|
||||
"Conflicts of interest Prof. Geusens reports grants, speaker fees and advisory board from Amgen, grants from Pfizer, grants from MSD, grants from UCB, grants from Abbott, grants and speaker fees from Lilly, grants from BMS, grants from Novartis, grants from Roche, and grants from Will Pharma, outside the submitted work.": false,
|
||||
"As the material combination used in this work is superior for the optomechanical quantum transduction task than any other approach to date, additional adjustments to our platform can be used to significantly improve the performance of this new class of devices by several orders of magnitude.": true,
|
||||
"While our evaluation shows that we can link appropriate segments of the clinical study to risk factors, it is the development of the query interface that will demonstrate the significant reduction in manual effort that this work requires, and will greatly widen its impact.": false,
|
||||
"We suggest that acquirers can resolve this coordination-autonomy dilemma by recognizing that the effect of structural form on innovation outcomes depends on the developmental stage of acquired firms' innovation trajectories.": false,
|
||||
"We show that usual MHD boundary conditions can lead to the violation of this physical limit and we implement this current density limitation through a boundary condition for the electrostatic potential.": false,
|
||||
"We show that current approaches for solving multiple-follower problems are unsuitable for our new class of problems and instead we propose a novel analytics-based heuristic decomposition approach.": true,
|
||||
"We recognise that these initial reflections on the different regulatory tools may sound sceptical of the potential for regulators to successfully address the possible negative effects of AR.": false,
|
||||
"We propose a novel approach capable of efficiently solving the multi-year task allocation problem for a fleet of aircraft in a few minutes.": true,
|
||||
"We improve each of the individual defenses' performance over the state of the art, achieving overheads well below NUMBER for each of them.": false,
|
||||
"We implemented the proposed controller on an embedded platform, developed by Cohda Wireless and NXP, with the aim to validate that the theoretical performance of our approach also translates to a good performance in a realistic scenario.": true,
|
||||
"We hypothesized that by CITATION using a simple convolutional architecture, and CITATION-distribution, it is possible to achieve state-of-the-art probabilistic forecasting performance compared to existing Transformer-based methods whilst requiring significantly fewer parameters.": true,
|
||||
"We have successfully applied computational methods to develop HIPe which exhibits high potential to inhibit histone H NUMBER induced cell lysis and consequently shows therapeutic benefit effects in an atherosclerotic mouse model.": false,
|
||||
"We have shown that by leveraging the potential of many existing EarlyTSC algorithms, our approach can outperform any single algorithm, even when their hyperparameters are optimised.": true,
|
||||
"We have presented a scenario-and platform-aware design flow SPADe for IBC system implementation that considers both pipelining and parallelism in an integral fashion to improve QoC of multiprocessor IBC implementations.": false,
|
||||
"We find that dynamic, rule-based investment strategies can outperform traditional static strategies, by which we mean that the investor may achieve the target retirement income with a higher probability or limit the shortfall when the target is not met.": true,
|
||||
"We extend the current state-of-the-art by proposing a novel adaptive approach, called aDynaMOSA Adaptive Dy-naMOSA, to address the two challenges described above.": true,
|
||||
"We demonstrate that the TempEasy system has the ability to screen phenotypic and functional effects of cell-cell interactions in a quantitative way and we believe that it may serve as a promising platform for future cell-cell interaction studies.": true,
|
||||
"We compare results from these past experiments in Appendix B. We are able to experimentally resolve, for the first time, increased performance with greater QAOA depth and apply QAOA to cost functions on graphs that deviate significantly from our hardware connectivity.": true,
|
||||
"We believe that this hybrid ML-PB approach offers the potential in the long term-with the rise of exascale, quantum and analogue processing-to deliver novel pandemic drugs at pandemic speed.": true,
|
||||
"We argue that the concept mapping intervention can accelerate the development of adaptive capabilities as it facilitates the development of the knowledge structures that are needed for team adaptation, namely the team members' development of a shared understanding about their task, roles, and each other's expertise.": false,
|
||||
"We adopt an explanatory case study approach to contribute to the development of theory of disruptive innovation.": false,
|
||||
"We address this outstanding problem by developing a general framework for computing physical properties of quantum manybody states efficiently on NISQ devices.": false,
|
||||
"Using the novel classification system, we identified different types of papillae significantly associated with a lower efficacy of NKF and a prolonged time to obtain successful biliary cannulation using NKF.": false,
|
||||
"Using data from simulated power markets, we analyse the forward premium in three identical power markets with a varying market share of VRES supplied to the system.": false,
|
||||
"Ultimately, we strongly advise the implementation of funding schemes for sustainably supporting the development and maintenance of research software based on clear and transparent criteria, for creating incentives to produce high quality community software, and for enabling career paths as research software engineer RSE.": false,
|
||||
"To this end, we develop a systematic framework for assessment of sustainable hydropower potential that makes three folds improvements to existing methods.": false,
|
||||
"To this end we propose our AQOSA toolkit which has been developed to enable component-based development and automatically improve the non-functional properties of an architectural design, thus allow architects to focus on the higher-level design decisions.": false,
|
||||
"These empirical inconsistencies provide the impetus for our research as they demonstrate that there are gaps in our understanding of how and when team social capital affects team innovation, which may obscure the true nature of the team social network-team innovation relation.": false,
|
||||
"There are various potential models for development i development in children first by academia then to industry; ii joint development by academia and industry; iii standalone academic development within a business model.": false,
|
||||
"The unique advantage of our methodology is that it secures meaningful process waste analysis in two ways: CITATION via the RPG score, which enables scientists to compare the sustainability performance of their process with industry averages.": false,
|
||||
"Since most of the systems around us exhibit some form of nonlinear behavior, nonlinear system identification techniques are the tools that will help us gain a better understanding of our surroundings and potentially let us improve their performance.": false,
|
||||
"Overall, we hope to show in this Review and in the years to come that oxalic acid has great potential the future because of its large potential applications in the polymer market.": false,
|
||||
"Overall, as a proof-of-concept, here we investigated the therapeutic potential of TA-coated AcDXSp NPs, which allowed successfully deliver two drug compounds for cardiac proliferation in CMs.": false,
|
||||
"Our work, which takes a different route, not only sheds new light onto the unveiling of a gradient flow structure for CITATION, but also provides the well-posedness CITATION for a general class of interaction potentials, including the Newtonian potential, which we believe to be novel.": true,
|
||||
"Our study explains the size differentiation in creative industries on the basis of a founder's attention focus and values, which may lead to firm development and, possibly, growth.": false,
|
||||
"Our study demonstrates that entering foreign markets does not necessarily nor directly leads to growth in terms of employees or revenues, but more to an accretion of a creative firm's symbolic capital or impact.": false,
|
||||
"Our results lead us to the major conclusions: Although porosity observations converge to an effective value with increasing observation scale andor number of samples; spatial correlation of samples lead to higher REV levels as typically assumed.": false,
|
||||
"Our research shows the added value of iterative development and user feedback for improving and further development of the tool's usability and functionality.": false,
|
||||
"Our paper only introduces the REF as a way of structuring market evolution, and we suggest future studies are necessary to elaborate on how markets evolve in the cases we addressed, as well as in others.": false,
|
||||
"Our novel modular approach to operating an automated microfluidic system for parallelized cell culture will enable greater experimental flexibility and facilitate the cooperation of different chips from different labs.": false,
|
||||
"Our novel coproduction framework, based on a set of five principles and thirteen criteria, proved useful as an assessment tool, stimulating critical reflection from which we were able to evaluate the actual performance of the thirteen criteria.": false,
|
||||
"Our model outperforms two state-of-the-art matrix factorization-based approaches, demonstrating the effectiveness of integrating neighborhood features in a deep neural network for POI recommendation.": false,
|
||||
"Our experiments also indicate that our proposed semi-supervised reasoning method achieves a comparable performance as state-of-the-art fully supervised learning baselines for physician policy learning.": false,
|
||||
"Our experimental results indicate great potential for improving the accuracy of energy consumption prediction by using automated machine learning approaches.": true,
|
||||
"Our aim was to identify potential opportunities for improving weather and market advisory dissemination to rural communities and remote and underserved farmers in developing countries.": false,
|
||||
"Our aim was to define a minimum Overall Adult Health Standard Set that will enable outcome measurement in routine clinical practice to improve decision making between providers and patients aged NUMBER years or older, to facilitate quality improvement, and to allow for benchmarking across organizations.": false,
|
||||
"Likewise, the networks that grow out of prestigious US business schools and Wall Street institutional investors in the world's largest capital market have extended into CIC corporate headquarters and its asset allocation strategy.": false,
|
||||
"In future work, we plan to develop more sophisticated methods for identifying and terminating unpromising target algorithm runs, to further enhance automatic configuration.": false,
|
||||
"In all these application, the convolution surface based modelling method proposed in our work can show great advantages in its effectiveness and scalability.": true,
|
||||
"In agreement with our hypothesis, results show that interaural segregation cues led to improved behavioral word-recognition performance and stronger cortical segregation of the distractor speakers.": true,
|
||||
"In addition, we overview a proof-of-concept prototype of our tool that facilitates existing software engineering mechanisms to achieve the above-mentioned features of our framework.": true,
|
||||
"In addition, our models will enable more rapid, cost-effective assessment of the efficacy and cellular toxicity of future novel therapeutic compounds to treat the main pathologies related to endothelial dysfunction.": false,
|
||||
"In a previous search for existing drugs with the potential of targeting Cantu Syndrome, also resulting from increased I KATP, we found a set of candidate drugs that may also possess the potential to target DEND syndrome.": false,
|
||||
"In NUMBER we therefore started to study the feasibility of integrating the hyperthermia HN device into an MR scanner for noninvasive MR thermometry by developing a novel applicator: the MRcollar.": true,
|
||||
"In LoTSS-DR NUMBER we also performed significant post processing of the radio catalogues to enhance their scientific potential.": false,
|
||||
"Here, we follow an \"actualization\" perspective within the entrepreneurial opportunity discourse wherein entrepreneurial opportunities are defined as \"the propensity of market demand to be actualized into profits through the introduction of novel products or services\" CITATION.": false,
|
||||
"Hence, we have demonstrated the need for researchers to distinguish different groups of solo self-employed when identifying factors that may enhance their well-being and performance.": false,
|
||||
"Furthermore, we elaborate on ongoing developments such as the rise of comparable registries, increasing support for preregistration in the Netherlands-which led to the funding of PCT by the Dutch government-and pilots of mandatory preregistration by several funding bodies.": false,
|
||||
"Furthermore, we demonstrate that a further developed version of our system may be applied in a wide range of settings by showing the successful application of the system in an elderly population.": true,
|
||||
"Finally, we explored sustainable development pathways of the capital region and the potential of this framework to inform and guide policy.": false,
|
||||
"Extensive experiments and comprehensive analysis performed on two widely used datasets-Microsoft COCO and Flickr NUMBER K-show the effectiveness of the hybrid feature fusion framework in CMHF, in which the stateof-the-art matching performance is achieved by our proposed CMHF method.": false,
|
||||
"By connecting the composition of the food basket to the supply chain that is necessary to deliver it, we are able to increase the efficiency and effectiveness of WFP operations, ensuring that, with the funds available, WFP can continue to supply life-saving assistance to as many people in need as possible.": false,
|
||||
"Both the first steps that the US state appears to be taking towards a stronger market-direction role, and the ongoing market-direction role of the Chinese party state parallel to its extensive internal and external market creation, must be seen in the context of an increasing Sino-US geopolitical rivalry.": false,
|
||||
"Before a risk assessment tool can be implemented we need to know its discriminative accuracy, predictive value, cost-effectiveness, transportability e.g., to particular populations, ages and gender etc., and the general availability of its variables e.g., to enable cross-study comparison and result verification.": false,
|
||||
"As AB in early life have a major impact on microbiota development which may lead to aberrant immune maturation, NUMBER our findings accentuate the need for finding strategies to modify microbiome development after AB exposure to decrease the risk of allergies.": false,
|
||||
"An analysis of the tiles by a domain expert shows that our approach can lead to the discovery of novel insights.": false,
|
||||
"Altogether, our study demonstrates the potential of trehalosepullulan as the main material to produce antigen-containing dMNAs able to induce an immune response after application.": true,
|
||||
"Also, as a result of analyzing market information, the venture would develop an understanding of which potential corporate partners operate in those end markets that demonstrate best sales and profit potential for the end products that could be developed.": false,
|
||||
"Scope and approach: In this commentary we argue that addressing these governance challenges requires the development and adoption of novel research and innovation RI approaches that will provide evidence to inform food system transformation and will serve as catalysts for change.": false,
|
||||
"To improve the costtime performance of these algorithms, we developed gpuZoo which implements GPU-accelerated calculations, dramatically improving the performance of these algorithms.": true,
|
||||
"To facilitate and support effective implementation of the framework, we propose CITATION implementing strategies to facilitate the necessary behavioral changes in the PHW; CITATION implementing strategies to facilitate system changes and NUMBER identification of potential barriers and obstacles for the implementation of these strategies.": false,
|
||||
"This restricts their development from on-station prototypes a prototype developed at an experimental farm to farm-scale adoption adoption of these experimental prototypes on a large scale by farmers.": false,
|
||||
"These novel results show that development in manufacturing have potential for significant improvements in thermal-hydraulic efficiency.": false,
|
||||
"Section NUMBER demonstrates the efficacy of the proposed algorithm; discusses the properties of the discovered SIMPs; compares our approach to existing methods; and presents a case study in aviation, highlighting how our approach could help improve an analyst's understanding of the problem.": false,
|
||||
"Here, we demonstrate the potential for achieving worldwide standardization, ensured by PT, although international implementation the three-leveled sRM is a prerequisite for the success of such a program.": false,
|
||||
"Although our paper addresses a number of significant issues related to dynamic capabilities, open innovation and competitive firm performance, future studies are recommended to contribute to a further elaboration of the third component of open innovation: the inside-in innovation processes introduced in this paper.": false,
|
||||
"As we see that the tourism industry worldwide is facing several developments and challenges, including overcrowding, sustainability, and climate change, applying this technique to measure tourists' preferences and choices for new solutions and strategies to handle these problems seems like a promising approach.": false,
|
||||
"While the landscape of WIMP searches in the traditional GeV-TeV range appears to offer faltering returns for dark matter discovery, our study illustrates how future MeV gammaray detectors provide very promising prospects over several orders of magnitude in the dark matter mass.": false,
|
||||
"What we see is that the transfer price rule improves market performance as long as...rm A remains in the downstream market.": false,
|
||||
"We will also show that such a reduction in the number of reactive components leads to improved performance robustness to variations in the inductive link coupling factor.": false,
|
||||
"We were able to optimize our pilot-scale device to produce fibers with a diameter below NUMBER mm for the first time, thus offering an industrial solution for the preparation of melt-electrospun nanofibers.": true,
|
||||
"We want to stress the importance of tracing back how the methods we propose are implemented in the field to shape a more realistic picture and state of the art, providing us with the possibility to improve and iterate on our methods.": false,
|
||||
"We successfully developed a method for de novo FAIRification via an EDC system that automatically transforms eCRF data entered into the system into machine-readable, FAIR data by the use of a semantic data model and a data transformation application.": false,
|
||||
"We show that semibetas stemming from negative market and negative asset return covariation predict significantly higher future returns, while semibetas attributable to negative market and positive asset return covariation predict significantly lower future returns.": false,
|
||||
"We show that following the regulatory change, the sensitivity of fund flows and managerial turnover to portfolio holdings information significantly increases for high, relative to low, volatility funds.": false,
|
||||
"We show that a magnetization gradient of the vortex can act as an effective SOC, which leads to spin accumulation at the rims of the device.": false,
|
||||
"We propose a novel surrogate-assisted Evolutionary Algorithm for solving expensive combinatorial optimization problems.": true,
|
||||
"We propose a new attacker model, based on dynamic optimization, where we demonstrate that large, initial, fixed costs of exploit development induce attackers to delay implementation and deployment of exploits of vulnerabilities.": false,
|
||||
"We performed a small-scale proof-of-concept study to demonstrate that the platform can be used for drug development.": true,
|
||||
"We note several contextual factors that appear to affect actors' need fulfillment, including health-care structures and institutions e.g. New technologies encourage the development of innovative services that can create beneficial outcomes for multiple actors CITATION.": false,
|
||||
"We hope the workshop can serve as a platform for fruitful discussions of known problems with modeling user features to personalize conversational systems, and for connecting people working on and interested in personalized intelligent conversational systems that lead to new collaborations.": false,
|
||||
"We hope that further development of the model and advancement in experimental techniques will lead to better accuracy in the determination of the parameters of real metal surfaces.": false,
|
||||
"We hope that by sharing our practical experiences, we may enable future researchers to more effectively conduct clinical trials in these populations who could still gain much from improved clinical care.": false,
|
||||
"We have presented the detailed design of our approach, and our experimental results have shown that our solution can achieve significant performance improvement compared to a benchmark solution.": false,
|
||||
"We have developed a novel snapshot hyperspectral imaging camera with a large field of view as a prototype system for non-invasively interrogating superficial anatomic structures and for monitoring changes in microvascular perfusion and oxygenation.": true,
|
||||
"We explore the innovation performance benefits of alliances for spin-off firms, in particular spin-offs either from other firms or from public research organizations.": false,
|
||||
"We envisage that this work will serve as a platform for the accelerated development of isoxazoles and other novel chemotypes for the effective allosteric targeting of RORgt.": false,
|
||||
"We demonstrated the latter benefit for the problem of hierarchical time series forecasting, where we observed up to NUMBER improvement in point performance and up to NUMBER improvement in probabilistic forecasting performance.": false,
|
||||
"We demonstrate that in oxide growth at low temperatures two key points should be highlighted: i the strong dependence of surface potential on reactive oxygen coverage; ii the interrelation between exposure conditions and crystalline oxide formation.": false,
|
||||
"We demonstrate a novel automated solution for creating high-quality knowledge-based plans KBPs using proton and photon beams to identify patients for proton treatment based on their normal tissue complication probabilities NTCP.": true,
|
||||
"We conclude that increased funding availability, research development and data generation, and prioritization within a coordinated binational agenda are needed to advance in terms of water security for groundwater systems in the border region.": false,
|
||||
"We conclude that despite provincial government intervention in regional planning, the impact of market pressures, growth coalitions and institutional coordination problems prevent growth management policies from delivering the significant changes promised by the Ontario government.": false,
|
||||
"We coin this merged approach'Design to Market Thinking' D NUMBER MT, i.e. an integrative thinking approach that could help sustainable innovations to successfully enter the market.": false
|
||||
}
|
||||
|
|
@ -1,502 +0,0 @@
|
|||
{
|
||||
"While promising advancements in improved photosynthesis may be achieved by genetic modification CITATION, we argue that using natural genetic variation for photosynthesis holds an equally promising potential for improvement.": true,
|
||||
"We find that market parameters have a more significant impact on pricing decision and the profit of the platform than logistics parameters, while logistics parameters affect the time decision of the platform more significantly than market parameters.": false,
|
||||
"We find that local informal competition has a robust negative effect on product innovation intensity of formal firms, while within industry informal competition enhances innovative sales.": false,
|
||||
"Then we substantiate our claim of a need for a new chaplain-led intervention, building on various promising and effective interventions of spiritual care that have been developed in recent years.": true,
|
||||
"The framework allows us to: i better qualify the categories of sustaining and disruptive innovation; ii understand the evolution of hybrid patterns of market innovation, since the elements of emerging disruptive innovations sometimes sustain the established technology, and; iii assess and map emerging market patterns.": true,
|
||||
"More importantly, we develop a novel hypothesis about the complementarity between founder social capital and a startup's technological capabilities to suggest that the bargaining impact of founders' social capital becomes more pronounced when a startup is also endowed with superior technological capabilities.": false,
|
||||
"In this setting we will develop novel analysis tools for generic identifiability of subnetworks that are formulated in terms of disconnecting sets in the graph of the network models, and we will show that this leads to a new and effective synthesis procedure for allocating external excitation signals for achieving identifiability of a subnetwork.": true,
|
||||
"However, we show that increased portfolio disclosure creates additional skill re-assessment risk from mutual fund investors for the fund managers, which can lead to an increase in management fees, a decrease in risk taking and thus a decline in net fund performance.": false,
|
||||
"Here, we critically review the most important pre-clinical and clinical findings, recent advances in CAR-T against myeloma, as well as discoveries in the biology of a still incurable disease, that, all together, will further improve safety and efficacy in relapsedrefractory patients, urgently in need of novel treatment options.": false,
|
||||
"For the funds that are forced by the regulation to increase their disclosure frequency hereafter, \"semi-annual funds\", we find that mandating more frequent portfolio disclosure increases the skill re-assessment risk from mutual fund investors for managers of high-volatility funds relative to those of low-volatility funds.": false,
|
||||
"While some of these described competitions overlap the structures and goals of existing alternatives, we believe that the benefits of our system, combined with the novel and varied ideas we present, will make Ludii one of the most attractive and popular competition platforms in future years.": true,
|
||||
"We described KIs' potential to improve combination therapies for solid cancers, and we anticipate that ongoing clinical trials will ultimately guide the implementation of optimal combinatorial approaches to maximize the immune system's anti-tumor activity.": true,
|
||||
"We conclude that the integrative model-based approach of evaluating the potential of new cropping systems in complex systems and fine-tuning alternative combinations will support the enhanced adaptability of innovative cropping practices to provide a sustainable livelihood to marginal households.": true,
|
||||
"We argue therefore that the time has come to focus on advancing the DBS system in terms of technological properties to better meet individual patient needs, leading to more effective symptom control, improved patient quality of life and reduced healthcare costs.": false,
|
||||
"Our findings can be used to improve existing school programs, for example, by integrating effective components in programs, or by developing new promising school-based programs that comprise the most effective components.": true,
|
||||
"In this article, we likewise argue that articulating the drivers and infrastructures that enable the introduction of novel technologies in our case: in PPH will aid the moral assessment of these developments, while it may also allow us to develop tools for critical self-analysis by stakeholders involved in such developments.": false,
|
||||
"Convinced of the potential of the VKB to revolutionize clinical trial data sharing among biopharmaceutical companies, our group in the EAPM is currently working, in cooperation with representatives of the biopharmaceutical industry, to resolve the issues mentioned above and to develop the web-based platform.": true,
|
||||
"Confirming previous work, we showed the potential to reduce GHG emissions from agricultural soils by the application of organic amendments CITATION; however, also the addition of MF in our mesocosm led to a promising development of the cumulative GHG.": true,
|
||||
"Compared to previous studies for instrument segmentation in the NUMBER D US, our proposed method achieves a higher accuracy with a considerably higher prediction efficiency, which offers a promising value for clinical implementation.": true,
|
||||
"Although innovation is the cornerstone of our conceptual model, which hypothetically affects firm performance, our results theoretically contribute to BMI research by highlighting the significance of the organisational capabilities as a mediator when planning to introduce innovations to enhance firm performance.": false,
|
||||
"With its clinical-driven design and easy-to-use setup, our robotic device for hand sensorimotor rehabilitation has the potential for high clinical acceptance, applicability and effectiveness.": true,
|
||||
"We expect that such freedom of choice, in turn, facilitates competition on quality or price, thereby making the private-client segment of the audit market a well-suited setting to study the price and quality effects of market structure and competition.": false,
|
||||
"We also propose improvements to the IKK attack by showing that the accuracy of the attack can be improved significantly by combining multiple attack runs, as we show that median recovery rates can be increased up to NUMBER percentage points, whereas the variance of recovery rates of simulation can be decreased up to NUMBER percentage points.": false,
|
||||
"There is great potential for the digital tools to increase access to eye care and we expect the accuracy of the current tools to improve with every iteration in technology development.": true,
|
||||
"Second, we propose a novel modeling approach, which allows to disentangle between product and process innovation, to empirically investigate innovation activity over the industry life-cycle on a comprehensive database of NUMBER European manufacturing industries.": false,
|
||||
"Our main finding is that to understand investor behaviour, different dimensions of investor characteristics and behaviour should be analysed concurrently; investors' scale of operation, ownership composition, type of capital, and locational and strategic behaviour help configure investment decisions in relation to property market shifts.": false,
|
||||
"From additional policy experiments, we find that labor market reforms aimed at weakening labor unions, by boosting profit margins and innovation, can foster a profit-led growth.": false,
|
||||
"First, since there is already some evidence on the effect of innovation vouchers on future collaborations CITATION, the main contribution of our paper lies in understanding if this policy tool and the use of external knowledge providers by SMEs also leads to improved innovation outcomes.": false,
|
||||
"By adopting a data set from a leading O NUMBER O freight platform in China, we find that the proposed model can effectively increase the revenue of the platform by more than NUMBER if the platform increases the price appropriately.": false,
|
||||
"Based on our findings we demonstrate that the framework of IMSI and SDT can effectively be applied as a frame of analysis to identify essential features of sustainability in educational innovations and we discuss how concepts of SDT deepen the knowledge of sustainable educational innovation.": true,
|
||||
"While these tools represent a significant progress in automated rapid generation and modification of NUMBER D molecular geometries, we sought to develop an easy-to-use tool which can quickly create reasonably accurate molecular geometries in the local chemical space of a given molecular scaffold.": true,
|
||||
"While AI-systems have the potential to increase market efficiency and economic welfare through improved predictions, these positive effects can only unfold in so far as the individual market actors i recognize that potential and ii subsequently engage with them.": false,
|
||||
"We propose a novel approach to address the path explosion problem: A smart triaging system that leverages supervised machine learning techniques to replicate human expertise, leading to vulnerable path discovery.": true,
|
||||
"We conclude that the most promising packages are combining innovation support and information provision with either a carbon tax and adoption subsidy, or with a carbon market.": false,
|
||||
"Therefore we employ a more objective indicator-market share of the niche-as the second axis, which helps to sketch socio-technical trajectories of niche innovations in the market overtime both regime sustaining and disruptive innovations.": false,
|
||||
"The increased complexity of modern sociotechnical systems STS necessitates the need for a manageable representation of their attributes, to augment our understanding and enable the development of ways through which we can increase their effectiveness, efficiency, and safety.": false,
|
||||
"Motivated by the potential for improving the capacities of socially intelligent systems, we investigate the potential of recognizing an individual's interdependence perceptions through an analysis of audiovisual recordings of dyadic conversational interaction.": false,
|
||||
"More precisely, our results suggest that the structure of knowledge networks are positively correlated with the innovative capacity, with particular reference to the cohesion of inventor networks, while social proximity offers a different, and precisely negative, contribution for breakthrough innovation.": false,
|
||||
"Methods: Using the case of the nationwide implementation of WGS into clinical practice in lung cancer in the Dutch healthcare system, we developed a simulation model to show that including service delivery features across the diagnostic pathway can provide essential insight into the affordability and accessibility of care at the systems level.": false,
|
||||
"In section four, we develop some illustrative examples to demonstrate the functionalities of the database: we look at water to illustrate the potential for studying access to amenities and we look at assets to illustrate the potential for studying inequalities.": false,
|
||||
"In general, our results indicate that an enabling performance measurement system design and an enabling system development process both independently increase procedural fairness and decrease red tape.": false,
|
||||
"FOREC demonstrates robust effectiveness, consistently improving the performance compared to competitive baselines on NUMBER target markets we selected for our study.": true,
|
||||
"Consistent with our conjecture that managers require more compensation for bearing the elevated skill re-assessment risk from fund investors, we find that following the regulatory change, high volatility semi-annual funds significantly increase management fees, relative to low volatility semi-annual funds.": false,
|
||||
"We encourage researchers to continue contribut-ing insights to enable the development and assessment of retail service innovations that create positive outcomes for shoppers, investors and the implementing retail firm.": false,
|
||||
"We are still in the very early stages of mobile-health implementation in psychiatry; however, if successfully developed, a mobile platform for early detection has the potential to help achieve major translational goals, such as early recognition of mental problems, accelerating access to care, and personalized monitoring of relapse.": true,
|
||||
"Recognizing the promising clinical potential of RSPOs as novel therapeutic targets, a clinical trial has been set-up that tested the safety and efficacy of the neutralizing monoclonal anti-RSPO NUMBER antibody OMP NUMBER R NUMBER Rosmantuzumab in cancer patients with advanced solid tumors and metastatic CRC CITATION.": true,
|
||||
"Immigrant inventors played a crucial role in making the United States an innovation powerhouse, by bringing new knowledge from their countries of origin CITATION and contributing to the longterm technological development of the US innovation system CITATION.": false,
|
||||
"Finally, we illustrated the applicability of the proposed implementations and design algorithms in a network consensus application, where we have shown that CEV-GF filters achieve machine-precision accuracy at a significantly lower communication cost than existing methods.": true,
|
||||
"We suggest that these differences may lead to a fractured market and an AI crisis in which different members of the EU will adopt nation-centric strategies to exploit AI, thus preventing the development of a frictionless market as envisaged by the EU.": false,
|
||||
"We show that, unlike in lemons markets, adverse selection in gems markets affects low-quality goods, leaving only high-quality goods on the market, pushing up prices.": false,
|
||||
"We provide theoretical foundations and empirical evidence for the impact of oil discoveries on the level of tariffs, illustrating that such discoveries can lead to economically significant higher levels of protectionism.": false,
|
||||
"We propose that IT governance process capability can improve IT performance, which in turn can improve business performance.": false,
|
||||
"We have therefore demonstrated the innovative performance of our pilot-scale melt-electrospinning device, which bridges the gap between laboratory-scale and pilot-scale manufacturing and achieves fiber diameters comparable to those produced by conventional solution electrospinning.": true,
|
||||
"We have therefore demonstrated the innovative performance of our pilot-scale melt electrospinning device, which bridges the gap between laboratory-scale and pilot-scale manufacturing and achieves fiber diameters comparable to those produced by conventional solution electrospinning.": true,
|
||||
"We demonstrate that markets with a high share of supply from VRES yield a significantly lower forward premium than markets with a low market share of wind or solar supply.": false,
|
||||
"We build a novel dataset of immigrant inventors to examine their impact on the US inventing activity between NUMBER and NUMBER Did native inventors benefit from immigrants' inventive activity?": false,
|
||||
"We believe the framework may add value to the development of robust HTA methods and effective implementation, which helps meet the needs for novel HTA methods due to emerging health technologies.": true,
|
||||
"To develop a conceptual framework for the translocal diffusion of sustainability innovations, we will use both the transition literature as well as the regional innovation systems literature, because of their complementary character on the topic of translocal diffusion of sustainability innovations.": false,
|
||||
"Therefore, we posit a need for novel approaches that enable studying host-microbe dynamics in a community ecology perspective, which can be utilised for devising effective diagnostic and therapeutic strategies.": false,
|
||||
"The use of multiple cameras and RGB-D devices may indeed improve the acquisition performance and precision, but renders the system more complex and costly, going against our goal to keep the system as simple and low-cost as possible.": false,
|
||||
"The development of influenza vaccines produced by transient expression is therefore one of the key niches of molecular farming that show unambiguous advantages over all other current manufacturing platforms, and this is reflected by the keen interest and investment in the platform by the US and Canadian governments.": true,
|
||||
"The collaboration and outsourcing of economic activities, we argued, enable registered firms to take strategic advantage of the'local' market acceptance of informal enterprises to expand market size and perform better with product innovations.": false,
|
||||
"Our results demonstrate the feasibility of such co-flocculation strategy for designing new high-rate anode material, which outperforms the original bulk HTiNbO NUMBER compound, making it a promising candidate for application in ultrafast lithium-ion batteries.": true,
|
||||
"Our findings demonstrate the potential effectiveness of an online evidence-based patient information portal in improving knowledge in patients with congenital heart disease, but also underline the crucial importance of effective implementation and active use of the portal.": true,
|
||||
"Moreover, our data show the potential of the PEA as a biomarker discovery tool in vitreous samples by highlighting CD NUMBER as a novel marker with potential diagnostic value for PVRL.": true,
|
||||
"Lastly, we provide a benchmarking tool that uses datasets following this standard to measure the performance of equivalent mutant problem tools, showing the performance in greater detail than state of the art EMP evaluation tools.": false,
|
||||
"Here, we propose a different method to achieve better scalability and higher accuracy using quantum computing, outperforming classical Bayesian neural networks for large datasets significantly.": true,
|
||||
"Here, we also synthetize the design of the architecture of the wireless monitoring network, the sensor technology adopted to develop an effective real time environmental monitoring system and management platform, to construct a Wireless Sensor Network WSN-early warning and reporting system, which can be applied as a prevention measure.": false,
|
||||
"By developing a new capital endogenization method that addresses the above temporality issue, we present a novel analysis on how China's capital development and the associated resource use and emissions over the past NUMBER decades CITATION are linked to meeting the final consumption of China and other countries throughout this time period.": false,
|
||||
"Although several ABS frameworks exist that achieve significant speedups using GPUs in the field of ABS, there is still significant room for improvement, which we wish to address in this article.": true,
|
||||
"Additionally, we developed a novel decentralized market clearing method called DACO that provides a near-optimal market solution in terms of maximum social welfare within limited number of stages.": true,
|
||||
"We broadly define market innovation as purposive actions by market stakeholders that result in a distinctively new or altered form of market.": false,
|
||||
"Using the variability of profitability among segments as our measure of the disclosure of crosssegment differences in performance, we find that existing competition is positively associated with cross-segment variability in profitability, whereas potential competition is negatively associated with cross-segment variability in profitability.": false,
|
||||
"To demonstrate the potential of PPO in industrial use, we show that for larger problem instances where the optimal solution is unknown, the algorithm finds solutions that outperform the benchmark an aggregate modified base-stock heuristic by NUMBER.": true,
|
||||
"To accomplish such goals as mentioned above, we need novel, sophisticated imaging tools CITATION CITATION CITATION as well as innovations to cushion the joint so that we are able to diagnose and treat the cartilage damage at the early subclinical phase.": false,
|
||||
"Overall, the application of our sectoral approach reveals that the need and potential for global governance to contribute to effective climate protection varies significantly across sectoral systems.": false,
|
||||
"Our work enables us to open the black box of the digitally enabled innovation activity by shedding light on collaborative activities between a focal firm and its customers and suppliers to advance innovation while coping with information overload.": false,
|
||||
"Our work demonstrates the possibility of using the BIL functionalized polymer as a tailorable and robust electrolyte material platform for scalable in situ NUMBER D printing of implantable energy storage devices that can potentially be utilized as biomedical devices and implants for healthcare applications.": true,
|
||||
"Our results demonstrate the efficacy of the proposed method for the optimization of light-matter coupling and its potential application for the enhanced performance of optoelectronic devices.": true,
|
||||
"However, substantial challenges, such as production cost, scalability, and compatibility with current manufacturing pipelines in industry, remain and need to be overcome before we can see the full potential of the materials benefit the public.": false,
|
||||
"For the area of automated machine learning, our work clearly demonstrates the potential of using multi-objective algorithm configurators within an integrated system leveraging many state-of-the-art techniques-an idea that can be extended to many other problems in machine learning in which multiple conflicting performance objectives arise.": true,
|
||||
"Finally, we devised a novel strategy for fusing medium resolution Sentinel-NUMBER and high resolution TerraSAR-X data to increase mapping accuracy by using the potential of both sensing systems.": true,
|
||||
"Compared to the earlier version, we have CITATION redefined our proposed system model; CITATION performed five additional novel experiments that demonstrate the efficacy of our solution; CITATION added a section about future work.": true,
|
||||
"While many MLD systems suffer from low deposition rates that limit their potential for use in new applications, we believe this work can help to give directions in optimizing the already created deposition recipes and in developing new MLD precursors, processes and equipment for lowcost and high-throughput applications.": true,
|
||||
"We also show that improvements in the classification performance can subsequently lead to a significantly better performance in the segmentation task.": true,
|
||||
"Our study shows that the inclusion of SNM, unlocks a certain market focus into DT that makes considerations on desirability, viability and feasibility less about the product alone, and more about the product and its deployment to the market.": false,
|
||||
"Our study delineates the impact of knowledge inflows from specific external sources, such as market-and science-based sources, on innovation performance in FFs and non-FFs and identifies which knowledge inflow sources FFs can convert into innovation outcomes more or less effectively than non-FFs.": false,
|
||||
"Our novel methodological approach builds on the theory of a problem-solution space for mission-oriented innovation systems proposed by CITATION NUMBER, allowing identification of interdependencies and hierarchies in and between missions that may lead to trade-offs.": false,
|
||||
"Our hybrid approach has great potential for the development of novel potential protein therapies, as it in part sidesteps the extrapolation challenges from NUMBER D or animal models to complex human physiology by efficiently combining in silico approaches with biologically relevant in vitro test systems.": true,
|
||||
"On this basis, we can assess the potential of international cooperation to address the challenges specific sectoral systems face in the climate transition as well as the extent to which existing sectoral institutional complexes deliver on this potential.": false,
|
||||
"In addition, we will further assess the proposed market using the data from other European countries and we will consider more complex trading strategies to quantify the maximum potential of the proposed market.": false,
|
||||
"In Chapter NUMBER we develop the theory of p-automata, which is essential to us for solving some algebraic equations in chapter NUMBER We start by defining in Section NUMBER concepts such as p-automaton and p-automatic sequences, and we finish with the theorem of Christol relating algebraic power series to automatic sequences.": false,
|
||||
"However, in second-generation processes, significant residual amounts of stillage are produced, and the development of effective valorization routes towards added-value platform chemicals for this material is key in boosting the profitability of the NUMBER generation bioethanol industry CITATION.": false,
|
||||
"Furthermore, we proposed an improved projection random sample consensus RANSAC method, which can effectively divide the detection plane of catenary cantilever devices to solve the multicantilever device occlusion problem.": true,
|
||||
"First, our study indicated that the collaborative process of collaborative innovation contests, facilitated by DT, can potentially bridge the mismatch between open innovation outcomes and company capabilities to adopt such innovation.": false,
|
||||
"By doing so, we are better prepared to adopt the framework for the analysis of electric propulsion systems in cars, a potentially disruptive innovation that has slowly been entering mainstream markets.": true,
|
||||
"As we enter an age of ubiquitous electronic health records EHRs, clinical decision support systems CDSS, and large, linked data sets with the potential to accommodate artificial intelligence AI algorithms, the need to better understand individual and collective decisionmaking has reached a critical point.": false,
|
||||
"Among others, we show that worse labor market prospects of the worker relative to the leader make it more costly to employ an altruistic leader and less costly to employ a spiteful leader, rendering the use of unfriendly leadership styles more attractive for the firm.": false,
|
||||
"All in all, using data across multiple asset classes and markets in an extended sample period, we conclude that r ROD positively and significantly predicts r LH and this robust pattern better describes market intraday momentum everywhere.": true,
|
||||
"While these tools represent a significant progress in automated and rapid generation of molecular geometries, we sought to develop an easy-to-use tool which can quickly create reasonably accurate molecular geometries in the local chemical space of a given molecular scaffold.": true,
|
||||
"We, therefore, have to wonder whether public organizations' use of social media can live up to the expectations that were raised more than a decade ago and whether a more effective tapping into the engaging potential of social media can indeed increase the visibility of public organizations on social media platforms.": false,
|
||||
"We show that the production of heterologous protein and MCFA contents are significantly enhanced when using the novel expression system, and we show that transformant strains are not impaired in growth.": true,
|
||||
"We found that employees with greater perceived future opportunities at work attached greater importance to mastery, meaning and affiliation needs i.e., approach needs, which in turn lead to higher engagement in need-congruent job and off-job crafting efforts.": false,
|
||||
"We argue in this paper that SNM aspects could serve as a necessary addition to DT to increase the chance of successful market implementation of sustainable innovations.": false,
|
||||
"To gain a better grasp of the evolving nature of markets in the NUMBER century, I return to the early theorizing by neoliberal thinkers of the market as an epistemic device that effectively and efficiently mediates information and knowledge between individuals and collective society.": false,
|
||||
"To address the unsatisfied needs in robotic sensorimotor rehabilitation, we aimed at developing a novel clinical-driven robotic hand rehabilitation device that is capable of high quality haptic rendering and that supports physiological full flexionextension of the fingers while offering an effortless setup.": true,
|
||||
"Therefore, we see the need of analyzing the potential benefits and trade-offs of the long-term implementation of these circular business models, especially in a market where they are gaining acceptance to further develop strategies to secure their possible environmental and material benefits.": false,
|
||||
"Our study therefore contributes to emergent research about the micro-foundations of firm strategy and performance e.g., CITATION, NUMBER;Foss and Pedersen, NUMBER; by emphasizing the role of founders in enabling a startup to capture superior value in their RD partnerships.": false,
|
||||
"More precisely, we show that for the tested problems such a single configuration switch can result in performance gains of up to NUMBER.With such a significant indication for improvement potential, we hope that our results trigger an intensified discussion of online algorithm configuration for CMA-ES variants.": true,
|
||||
"In doing so, we hope that B NUMBER B innovation managers will improve their conceptual perspective on innovation by including service design as an effective tool to foster stakeholder engagement throughout the project life cycle in the innovation network.": false,
|
||||
"In addition, we discuss what is needed to improve the situation further, in order to use this technology to its fullest advantage and avoid \"leaks in the pipeline\", when a promising device fails to take the next step of the valorization pathway and is abandoned.": false,
|
||||
"Experimental evaluations demonstrate that while state-of-the-art methods have limited capability of reconstructing USCT image from frequency domain data, our proposed method can effectively reconstruct details for USCT images, which could lead to faster diagnoses and treatment decisions for breast cancer patients.": true,
|
||||
"Drawing on self-determination and play theories, we develop a process model that proposes that daily playful work design PWD; designing fun, designing competition positively relates to employees' daily work engagement through basic psychological need satisfaction.": false,
|
||||
"In particular, we introduce a novel EarlyTSC framework addressing the MO-CASH problem for EarlyTSC that achieves the following: In Fig. NUMBER c, we illustrate the improvements that can be achieved by an automated search over an expanded space of multiple algorithms and all their hyperparameters.": true,
|
||||
"We suggest that significantly underexploited opportunities exist to enhance integration of such short-and long-term technology and policy interventions, which together could provide a more effective pathway to enable the appropriate intensification of groundwater use for irrigation in Nepal and the EIGP.": false,
|
||||
"We show that it can outperform state-of-the-art multiway and two-way Linear Discriminant Analysis classifiers in asynchronous detection of individual finger movements from intracranial recordings, an essential feature to achieve a sense of dexterity with hand prosthetics and exoskeletons.": true,
|
||||
"We provide recommendations to help achieve ASP systems designed to use climate forecasts, arguing that tailored seasonal forecast products have potential in some countries to improve the lead time of interventions to address climate-induced disasters.": false,
|
||||
"We have presented a novel and improved minimization algorithm for t-SNE, providing significant performance improvements above the state-of-the-art, especially for large datasets and higher dimensional embeddings.": true,
|
||||
"We find corroborating evidence for a temperature signal in brGMGT assemblages, further demonstrating the potential to develop novel proxies with more extensive studies of modern distributions.": true,
|
||||
"We detail how our algorithm can be implemented on the target platform or on NISQ computers, bringing forth a promising application of these devices.": true,
|
||||
"To overcome these limitations, we developed a highthroughput TCR repertoire and discovery platform that enables linking T cell phenotype with TCR gene and function data at single-cell level.": true,
|
||||
"To demonstrate the societal benefits of adherence improvement, we recommend that the most promising interventions are subjected to rigorous evaluation of clinical effectiveness in pragmaticallydesigned, randomized, controlled trials.": false,
|
||||
"The high-minus-low return spread is - NUMBER and - NUMBER for UK investors and Japanese investors, respectively, in the universe of all currencies, and - NUMBER and - NUMBER in the universe of developed markets' currencies, confirming that the US equity tail risk factor has a global component.": false,
|
||||
"Our study shows that there are performance trade-offs for each BPM orientation with regard to potential, selectivity, and stability: the forward bias lowers the overall cell potential by reducing the chemical potential, while the reverse bias gives a stable product formation of CO NUMBER conversion products.": false,
|
||||
"Our results when using this customized Six Sigma methodology demonstrate the suitability of this method for improving the SCA process in its different stages; from the basis of the process which is improving the quality of the acquired side-channel measurement to the performance of any kind of side-channel attack or leakage assessment technique.": false,
|
||||
"Our results show that the novel MRcollar design enables achieving comparable heating capabilities as compared to the current clinical HYPERcollar NUMBER D.": true,
|
||||
"Our main aim is to create a European research agenda, data sharing, and development of best practice for clinical and translational science to achieve breakthroughs with clinically feasible HIV cure strategies.": false,
|
||||
"Moreover, building also on estimates of NETs' achievable potential, which are well below biophysical limits CITATION, we calculate the actual deployment level of the most promising NETs that would be necessary to meet the NUMBER C target under three different scenarios CITATION, NUMBER b.": false,
|
||||
"In this review, we demonstrate that a web-based scoring platform can mitigate potential risk factors when including sTILs in clinical trials, and we argue that this framework can be applied for any future biomarker-driven clinical trial setting.": false,
|
||||
"Here, we examined the feasibility of, and initial responses to, large walking perturbations in COPD, as well as the adaptation potential of people with COPD to repeated walking perturbations that might indicate potential for perturbation-based balance training in COPD.": false,
|
||||
"Here we investigated interneuron abnormalities in two experimental models of EoP and explored the potential of two promising treatment strategies, namely intranasal mesenchymal stem cells MSCs or insulin-like growth factor I CITATION, to restore interneuron development.": false,
|
||||
"From the dynamic capabilities perspective, we assume that the development of CE in the firm implies the use of firm capabilities and the alignment of these in the development of a dynamic process of innovation towards the development of CE in firms.": false,
|
||||
"Due to the unique single-particle and single-molecule properties and high-throughput capabilities of SMLM techniques, we strongly believe these results highlight their potential to be used in the routine design, quality control and optimization of nanomaterials with improved biological efficacy.": true,
|
||||
"Comparison with several state-of-the-art baselines shows that our FairMatch algorithm is able to significantly improve the performance of recommendation results in terms of visibility of different items and suppliers with a negligible loss in the recommendation accuracy in some cases.": true,
|
||||
"By unpacking two key mechanisms for basic research investments to improve firms' innovation performance, our results provide a more detailed understanding of the changing rationale for basic research in firms in the context of declining corporate basic research investments.": false,
|
||||
"As such, there is increasing awareness of the need to address significant TR in a manner that comes with i an acceptable level of risk and ii a meaningful clinical outcome.": false,
|
||||
"With those in mind, we believe that improved knowledge on marine ES flows can also support the implementation of policy responses and actions as part of the Intergovernmental Science-Policy Platform on Biodiversity and Ecosystem Services IPBES agenda, to achieve sustainable governance and management of seascapes, oceans, and marine systems.": false,
|
||||
"While numerous studies have demonstrated that augmentation can improve classification and regression accuracies, to date none have explored augmenting multivariate time series i.e. Our research aims to fill this gap by identifying methods capable of successfully augmenting multivariate time series for regression analysis.": true,
|
||||
"We show that the proposed loss function significantly reduces the quantile crossing problem to near NUMBER in all markets considered, while in some cases simultaneously increasing forecasting performance based on classical point forecast metrics applied to the expected value of the probabilistic forecast.": true,
|
||||
"We show that optimal performance is achieved when all atomic levels experience the same potential outside the dimple and we quantify the cooling for various NA by evaluating the dependence of the final entropy densities and temperatures as functions of the initial entropy.": true,
|
||||
"We see a similar potential in the imaging context, which would allow for an improvement in the convergence of the inference and further enhance the sen-sitivity beyond the capabilities that we have demonstrated with this publication.": true,
|
||||
"We have found that labor market integration happens gradually in three stages of entering the labor market, integrating into the labor market and sub-merging with the labor market.": false,
|
||||
"We have developed the novel ChemoTopoChip platform to screen the potential of both chemistry and topography in producing immunomodulatory materials suitable for bone regenerative applications.": true,
|
||||
"We further propose several research perspectives that could support the LC-NE system as a promising target for the identification of at-risk individuals in the preclinical stages of AD, and for the development of novel preventive interventions.": true,
|
||||
"We find that mandatory disclosure of portfolio holdings exposes managers of highvolatility funds to considerable skill re-assessment risk from mutual fund investors, which steer their behavior towards actions that ultimately hurt investors.": false,
|
||||
"We find that a higher number of walk-in customer orders leads to optimal online order fulfillment policies with higher delivery frequencies, i.e., shorter staging times, which are required to mitigate the effect of increasing competition among the two sales channels for the same inventory positions on online service level.": false,
|
||||
"We explored whether the need for achievement and need for affiliation enhance the effects of course characteristics on students' entrepreneurial self-efficacy and study engagement, which advances our knowledge on how to teach entrepreneurship while taking individual differences into account.": false,
|
||||
"We evaluate the proposed method in simulation, showing that our framework can improve prediction performance over baseline methods and avoid catastrophic forgetting, and in experiments with a mobile robot, showing that our framework can continuously improve a prediction model without the need for external supervision.": true,
|
||||
"We discuss the collective, cumulative and uncertain characteristics of innovation, highlighting the lack of transparency in the biomedical RD system, the need for public investment in the innovation process, and the \"time-lag\" between risk-taking and reward.": false,
|
||||
"We conclude that our solution is a promising tool for privacy-preserving machine learning tasks on distributed patient data, potentially leading to an improvement of the quality of healthcare, while respecting the privacy of involved patients.": true,
|
||||
"We assume that actors can contribute to building up resources for innovation success like new knowledge, early market structures, financial capital or legitimacy, for example through RD, networking, investments, or institutional work, Musiolik and Markard, NUMBER CITATION, NUMBER b.": false,
|
||||
"We argue that industries using general and generally available knowledge can easily live with a deregulated hire fire labor market regime like in the US, while the functioning of the routine innovation model in mature but knowledge-intensive industries takes advantage of low rates of job turnover due to well-protected insider positions.": false,
|
||||
"Together, we developed cheap and easily synthesized compounds that dramatically outperform known crosslinking tools, providing the community with a novel strategy for understanding RNA NUMBER D structures and alternative conformations in cells.": true,
|
||||
"To overcome previous limitations, we devised novel methodology, enabling simultaneous invasive assessment of both LV and coronary hemodynamics for the first time.": true,
|
||||
"The reference distances of EP inventors referring to US inventors are much larger than those of US inventors referring to US inventors.": false,
|
||||
"The Seminar has also highlighted the need to pay due attention to technological developments that may help to overcome at least some of the problems that nowadays we face in the application of a healthy diet: new technologies may help modern husbandmen and farmers to produce healthy foods sticking to local traditions but also at a reasonable cost.": false,
|
||||
"Second, we find a substitutive interaction effect between market orientation and new product development stage, indicating that for exits through acquisitions, a high level of market orientation can compensate for an early stage of product development.": false,
|
||||
"Reconstruction results based on simulated data are very promising, and we think that, by addressing the practical issues discussed above, we will indeed make significant progress towards a reliable EPT reconstruction method that provides us with accurate dielectric tissue maps in practice.": true,
|
||||
"Our study establishes CXCL NUMBER as a key component in fibrosis development and the potential of blocking CXCL NUMBER as a promising therapeutic strategy.": true,
|
||||
"Our future work mainly lies in extending the proposed approach with more advanced network clustering algorithms, and our long term goal is to develop a highly efficient and intelligent system to automate the management of complex WMNs.": true,
|
||||
"On the basis of a feasibility analysis, we conclude that the identified challenges can most likely be successfully overcome by platform co-ops that organise taxi rides and professional jobs, while it may prove much more difficult in food delivery, homecare and microtasking.": true,
|
||||
"NUMBER We develop a tailor-made Frank-Wolfe algorithm that can solve the dual estimation problem orders of magnitude faster than state-of-the-art general purpose solvers.": true,
|
||||
"It is clear that we need to continue co-inventing the future of POC technology with multiple stakeholder groups towards the development of a global paradigm to address critical needs, and provide quality healthcare at affordable cost.": false,
|
||||
"Furthermore, our results have proved that the proposed modified U-Net is capable of considering the neighborhood effects effectively, whose advantage is eliminating the need of using a CA to combine with our method.": true,
|
||||
"For the second task, we obtain a question representation that contains all possible answers in equal quantum superposition, and we implement Grover's quantum search algorithm to find the correct answer, agnostic to the specific question, an implementation with the potential of delivering a result with quadratic speedup.": false,
|
||||
"Following on from this we show the results of applying the approaches to the robot platform demonstrating the effectiveness and accuracy that can be achieved.": true,
|
||||
"Finally, we expect that the disorder of metallic electrodes at the atomic scale leads to uncontrolled local electrostatic potential surrounding the nanoscale object, a problem that NUMBER D covalent crystals have the potential to overcome.": true,
|
||||
"Experimental results show that an upstream signaling rate of NUMBER kbps can be achieved with our simple and low-cost prototype, enabling NUMBER Gbits link per user.": true,
|
||||
"Drawing on the literature on sustainability-oriented innovation and innovation resistance theory, we explore the potential of blockchain technology to contribute to sustainable transformations within food supply chains.": false,
|
||||
"Despite our high-quality data and correction for competing risks in our prediction model for the development of SPTs, it should be further developed to allow clinical use.": true,
|
||||
"Based on the measurements and visual observations of the wake flow, we develop a hypothesis to explain how the presence of developed cavitation leads to increasing compressibility Mach number in the wake flow that, in turn, results in a change in the underlying flow pattern of the near-wake, leading to an increase in the vortex formation rate.": false,
|
||||
"As a proof of principle, to demonstrate the feasibility of releasing drugs, we also showed the effect of HASF hydrogel composition on the release of small hydrophobic anti-inflammatory and anabolic drugs, that had previously been identified as promising agents.": true,
|
||||
"Accordingly, we perform many experiments to demonstrate that the proposed method can be implemented on academic papers in any period after publication with a significantly higher degree of accuracy and robustness than the existing algorithms applied to new papers.": true,
|
||||
"And as the challenges faced by cities seem to become greater with time, the need for novel, critical, and creating approaches on how we could use the potential of play to improve urban life, foster sustainability, consolidate resilient and inclusive communities becomes even more urgent.": false,
|
||||
"While still at its infancy, we hope that the PCA initiative has the potential to serve as a nucleator, bringing together scientists and engineers from a wide range of fields to solve fundamental problems in plant biology with innovative solutions from emerging technologies.": true,
|
||||
"While markets can be understood in many different ways, we argue that a network perspective to markets, instead of a channel perspective, offers a promising entry point to reflect on a fruitful role that stakeholder involvement could play for the transition to a CBE.": false,
|
||||
"We will elaborate on the engineering potential of both liposomes and EVs to enhance favorable pharmacokinetic characteristics in order for these vesicles to function as effective drug delivery systems DDS.": true,
|
||||
"We will demonstrate how, through an ongoing process of reflexive innovation, our responses to the above questions have shifted and evolved, leading to a more sophisticated and diversified understanding of the well-being challenge.": false,
|
||||
"We show that within the context of our application, the FPGA accelerated implementation can achieve close to NUMBER GBs of parsing and conversion throughput when the accelerator host-to-device interface provides enough bandwidth and when enough FPGA resources are available.": false,
|
||||
"We show that this exact approach can solve instances with up to NUMBER customers to proven optimality, improving upon existing exact methods that can solve similar problems with up to ten customers only.": true,
|
||||
"We discuss necessary preconditions for successful development and implementation of eGovernment services in a multi-level polity and propose the following recommendations: firstly the EU needs to assess the potential impact of proposed eGovernment systems during the phase of policy development.": false,
|
||||
"We describe the implementation of spectral polarization modulation in a prototype satellite instrument, the SPEX prototype CITATION and in groundSPEX CITATION, which is specifically developed for ground based measurement.": false,
|
||||
"We conclude by identifying the most promising directions where advances in these material systems will enable progress in qubit technology.": false,
|
||||
"We achieve a better performance, in terms of robustness to catastrophic forgetting, than the state-of-the-art regularization and architectural methods using a fixed model capacity, outperforming the regularization methods by a big margin.": true,
|
||||
"To reach these goals, we need to continue the search for biomarkers addressing real clinical needs, to increase the number of prospective studies to show clinical benefits of the putative markers already known and to analyse the costs of using biomarkers in the clinic from a societal perspective.": false,
|
||||
"To ensure computational tractability, we develop a reduced-space formulation for trained one-class support vector machines and show that our formulation outperforms common full-space formulations by a factor of over NUMBER making it a viable tool for engineering applications.": true,
|
||||
"To address this research challenge, we pose the following research objective: To develop a method for the definition of business model key performance indicators KPIs catered to the characteristics of the business model innovation process to support business model decision making.": false,
|
||||
"Through our results, we have demonstrated that oxygen saturation imaging using a dual-wavelength LED-based photoacoustic system has potential in pre-clinical and clinical applications.": true,
|
||||
"The predicted melting points for these interatomic potentials are provided in Section NUMBER Note that our fully automatized approach allows to predict the melting point of any given interatomic potential with a very high numerical precision but not necessarily with high accuracy.": false,
|
||||
"The high variation in adenoidectomies might indicate a lack of agreement on indications for surgery, and our findings underscore the need for high-quality effectiveness research to improve evidence-based guidelines on this topic.": false,
|
||||
"The average share of manufacturing increased in all developing countries between NUMBER and In comparative perspective we observe a long-run increase in the shares of manufacturing in developing countries, and a long-run contraction in the shares of manufacturing in the advanced economies.": false,
|
||||
"Subsequently, in a comparison of our automated failure prediction models, we discovered that all four AI algorithms, RF, GB, LSTM, and GRU, that utilise combined system metrics or multimodal inputs outperformed the state-of-the-art studies.": true,
|
||||
"Recognizing that the total demand and demand flexibility may increase significantly in the future, we included a high share of electric vehicles to test the robustness of the market designs.": false,
|
||||
"Recently, we described the use of a high-throughput organ-on-a-chip platform, the OrganoPlate, for therapy response testing of breast cancer, showing the potential of the platform for three-dimensional tumor models and its application in assessing the resistance of cells to chemotherapeutic agents for personalized medicine CITATION.": true,
|
||||
"Our work demonstrates important progress in the implementation and performance of quantum optimization algorithms on a real device, and underscores the challenges in applying these algorithms beyond those natively realized by hardware interaction graphs.": true,
|
||||
"Our study demonstrates that asynchronous advantage actor-critic A NUMBER C, a deep reinforcement learning DRL method, can be successfully utilised to develop an autonomous trading agent capable of exploiting arbitrage opportunities.": true,
|
||||
"Our results show that the innovation voucher program has an immediate, short-term impact on the execution of these innovation projects with positive effects on product and service development, internal processes, and intellectual property protection.": true,
|
||||
"Our diagnosis approach not only provides a practical tool for managers to develop context-specific solutions to variability, its development also enables us to contribute important insights that strengthen the OM literature on flow improvement.": false,
|
||||
"Moreover, we are the first to explore the potential of two promising treatment strategies in the field of neonatal brain injury, i.e., intranasal MSCs and IGF NUMBER to restore interneuron deficits and improve sociability in our EoP mouse model.": true,
|
||||
"Importantly, Amsterdam and Paris already had highly-developed housing markets, and unique microlevel data survived in the archives of both cities, allowing us to track mortality and the developments in the housing market following an epidemic.": false,
|
||||
"For the future, we propose a model in which the DCRT is reimbursed by national payers for each successfully developed ASO, so these funds can then be invested in the development of new individualized ASOs for additional patients.": false,
|
||||
"Extensive experiments based on real-world datasets demonstrate that our approach achieves a high efficacy of detection performance against the state-of-the-art.": true,
|
||||
"Experimental results show that ArtSAGENet outperforms several strong baselines and obtains state-of-the-art performance in fine art analysis, while qualitative analysis of the representations learned by our approach indicates that it is capable of capturing interesting properties of fine art.": true,
|
||||
"As genome-scale computational modelling of underground metabolism successfully predicts the potential to utilize new nutrient sources in E. coli CITATION, we reasoned that a similar approach could be employed to characterize the theoretical potential of underground reactions to produce industrially relevant chemical compounds.": false,
|
||||
"As concerns the role of mobile phones for the displaced in particular, the United Nations High Commissioner for Refugees has stated that, a connected refugee population can play a critical role in enabling organizations such as UNHCR to innovate effectively and to improve the quality of services that we provide.": false,
|
||||
"Addressing this gap is beneficial at least in two respects: it allows us to look, for the first time, into technology commercialization and the context specific factors that affect it in Iran; it helps us to see how commercialization boosting policies work in a developing country under economic sanctions.": false,
|
||||
"Additionally, we examined whether paternal characteristics could improve model performance of the developed prediction models within a subgroup of our population and we examined the predictive performance of the developed prediction models on secondary maternal, delivery and neonatal complications.": false,
|
||||
"We presented a particular method to generate NUMBER D engineered cultures for the first time with human-derived neurons coupled to MEAs, overcoming some of the limitations related to NUMBER D and NUMBER D neuronal networks and thus increasing the therapeutic target potential of these models for biomedical applications.": true,
|
||||
"To build on these promising results, the development and use of CM optimization techniques, for example similar to the recently developed framework by CITATION NUMBER are important for identifying the most promising combinations of scaffold properties.": false,
|
||||
"Subsequently, in we discuss redirecting enforcement towards the demand side of the market and inquire whether certain practices by employers may be condemned as antitrust infringements when they harm competition in labour markets and whether this approach can contribute to addressing the concerns addressed here.": false,
|
||||
"While the preponderance of evidence from previous studies identifies supply chain complexity as detrimental to firm performance, our results illustrate that although supply chain complexity has a negative effect on operational performance, it has a positive effect on innovation performance and financial performance.": false,
|
||||
"Whereas the Prototypical Part Network ProtoPNet CITATION presents a user a large number of prototypes, our novel architecture with end-to-end training procedure improves interpretability by arranging the prototypes in a hierarchical tree structure.": true,
|
||||
"Well known businesses like Lufax, Flipkart, Snapdeal and Lianjia represent examples of Unicorn companies born in China and India with a market value of over NUMBER billion US dollars, thereby attesting to the potential of emerging markets on giving birth to fast growing start-ups.": false,
|
||||
"We argue that besides improving the quality of the provided diagnostics, allowing some tolerance in deviations assessment also enhances the flexibility of conformance checking techniques and, indirectly, paves the way for improving the resilience of the overall process management system.": false,
|
||||
"Using a case study on agricultural diversification in the former homeland of Venda, South Africa, we explore the usefulness of the nested markets concept to make sense of smallholders' patterning of markets by combining tree crops for export with seasonal vegetables for local markets.": false,
|
||||
"To this end, we propose an integrated dynamic market mechanism which combines the real-time market and frequency regulation, allowing competitive market players, including renewable generation, to negotiate electricity prices while using the most recent information on the grid frequency.": false,
|
||||
"To demonstrate the clinical potential of a robust functional parcellation of the PAG, we propose an exploratory application that can be used to study connectivity changes between different subregions of the PAG related to changes in bladder fullness and bladder sensations.": true,
|
||||
"The NUMBER D organoid systems that we describe in this review CITATION represent a promising platform to further understand the neuropathology of PKU by providing tools to specifically address PKU-related targets and modulate key aspects of oxidative stress, brain L-Phe clearance, neurotransmitter deficiencies and LNAAs brain uptake.": true,
|
||||
"Our studies highlight, for the first time, the therapeutic potential of Epac NUMBER inhibition in hippocampal neuronal cells, and the importance of developing new pharmaceuticals to treat neurodegenerative diseases.": true,
|
||||
"Our results show that both approaches improve performance in the basal and apical regions, although only the classification and segmentation approach produced significantly better results across all labels and datasets.": true,
|
||||
"Our research shows that the concepts serve distinct purposes at different stages of the business model innovation process, and we discuss these findings and their broader implications for the literature on business model innovation and for innovation management practices in B NUMBER B companies.": false,
|
||||
"Our research is situated within these debates, drawing attention to the development-led aspects of planning processes tied to density bonusing, emphasizing its ascent over the past NUMBER years from a development control to development enabling policy.": false,
|
||||
"Our findings suggest that the market reacts positively to a switch to exploration, which signals that the firm is ready to engage in high-quality innovation, once it has completed a series of exploitative acquisitions to build the slack necessary to fund it.": false,
|
||||
"Motivated by recent market developments and the potential of elastic CDNs, we proposed the new problem of dynamic cache rental, file caching and user association for wireless edge caching networks.": false,
|
||||
"Moreover,the possibility to identify the inhibitory selectivity among endogenous LOX isoenzymes will facilitate our understanding of LOXinhibition and will thus facilitate drug discovery.T herefore,w ea im to develop novel tools to investigate the activity of endogenous LOXi soenzymes to advance LOX-oriented research and drug discovery.": true,
|
||||
"Moreover, we present the potential of these applications in cardiovascular and cardiothoracic medicine, and additionally, we will provide key facilitators, challenges, and recommendations to adopting these technologies in clinical practice.": false,
|
||||
"Moreover, we demonstrated the positive impact of generated answers on the performance of the retrieval model of the conversational search system, as the performance significantly increased when the answers to clarifying questions were taken into account.": false,
|
||||
"In this review, we will address the progress that has been made using non-ribosomally produced peptides and ribosomally synthesized and post-translationally modified peptides as scaffolds for designed biosynthetic pathways or combinatorial synthesis for the creation of novel peptide antimicrobials.": false,
|
||||
"In particular, our numerical studies for the Le Mans race track indicated that the lap time of a CVT-equipped electric race car can significantly outperform the one achievable with an FGT, as a CVT can counteract its higher mass with a more effective motor operation, although strongly dependent on the powertrain design choices.": false,
|
||||
"In doing so, we are able to illustrate how new actors-in this case the European Commission and the Commissioner for Competition-were able to terminate long-existing policies of state aid to shipbuilders under the auspices of improving competition and the free market at the start of the NUMBER s.": false,
|
||||
"In addition, we find that our proposed unsupervised method significantly outperforms the state-of-the-art baselines in cross-lingual knowledge selection.": true,
|
||||
"Here, we show that with the proposed implementation, and by selectively making the proposed simplifications, as well as selectively choosing the grid parameters, a model can be obtained that has a minor impact on model accuracy, achieving a simulation time of over NUMBER times faster than real-time.": true,
|
||||
"Due to the promising application of highly rigid anionic liposomes in the field of antigen-specific tolerance and the need for methods to efficiently load tolerogenic adjuvants, we developed a microfluidicsbased approach.": true,
|
||||
"Consistently with previous work, we found that the use of InSAR coherence leads to a significant improvement of the classification performances, for example, with improvements in the user accuracy for most classes considered in the order of NUMBER p.p.": true,
|
||||
"As intensive operations are to be performed on sensors, we demonstrated the feasibility of such a construction by implementing a proof of concept while using a resource-constrained device as a sensor.": true,
|
||||
"Although we expect our findings to be generalizable to other creative industries, it would be interesting to extend this research to investments in start-ups in non-creative industries, focusing on key serial entrepreneurs CITATION with the CEO and the CTO role e.g. the software industry or the CEO and the CSO role e.g. the biotech industry.": false,
|
||||
"We suggest that future studies further investigate the potential of these techniques for the improvement of freshwater invertebrate detection and abundance estimation, which might eventually lead to a robust application of DNA techniques for a total freshwater census.": false,
|
||||
"We report the potentialities and pitfalls of one of the first commercially available devices capable of recording brain local field potentials LFPs from the implanted DBS leads, chronically and during stimulation.": false,
|
||||
"We propose a novel network data envelopment analysis NDEA model, capable of setting store-level performance standards more accurately than state-of-the-art models.": true,
|
||||
"We hypothesize that an enabling design and an enabling development process, as compared to a coercive design and a coercive development process, lead to perceptions of greater procedural fairness and less red tape.": false,
|
||||
"We hope to discover which virtual environment design aids the performance of both the sexes, thus establishing a framework for designing virtual training environments and possibly GPS-based navigation systems that successfully comply with the both sexes, without impairing the performance of either one.": false,
|
||||
"We expect future developments in machine learning and optimization together with novel fabrication techniques to lead to unprecedented nanotechnology within the next decade.": false,
|
||||
"We demonstrated that the proposed idea can improve the performance of the baseline DeepLabv NUMBER by about NUMBER in mIoU sense on two of the most modern and commonly-used datasets PASCAL VOC NUMBER Cityscapes while boosting the performance in certain classes up to NUMBER without introducing any extra delay at inference.": true,
|
||||
"We demonstrate the successful development of a realtime data infrastructure that enabled both data-driven care and decision making and rapid answering of critical clinical questions during pressing times, such as the COVID-NUMBER pandemic.": false,
|
||||
"We believe that, with the relentless advances in scalable manufacturing techniques such as cutting, casting, and coating, findings from this study can facilitate the development of multitech combined devices, that is, photovoltaic-thermoelectric PV-TE coupling system which to date is still at its infancy stage.": false,
|
||||
"To understand this innovation gap, we reviewed the literature to describe the potential of AMPs as alternative to antibiotics and the challenges toward clinical application of AMPs.": false,
|
||||
"To that end, we developed a novel asynchronous arm-crank ergometry platform for use in a clinical magnetic resonance MR scanner with NUMBER P spectroscopy capability to study arm muscle energetics.": false,
|
||||
"Therefore, addressing the psychological patient factors found in our study preoperatively might lead to low-cost interventions to improve return to work after The graphs show the HRs for a simulated patient in which the baseline characteristics are fixed CITATION.": false,
|
||||
"Said differently, even if the focal firm may shy away from acquiring a larger target due to the fear of retaliation, some degree of synergies and gains in market power can also be achieved by acquiring a smaller firm, especially if we consider acquisitions within the same industry.": false,
|
||||
"Our results indicated that the combination of an open innovation contest and design thinking could, through the creation of constant feedback loops, lead to increased collaboration between the contests participants, the companies proposing a challenge, and other relevant stakeholders.": false,
|
||||
"Our novel method provides a simple way to produce customized NUMBER D ultrathin fibrous scaffolds, with great potential for TE applications, in particular those for which anisotropy is of importance.": true,
|
||||
"Our findings are promising as they point to the potential of LKM and self-compassion to serve as a practically attainable way for entrepreneurs to develop resilience and more effectively cope with entrepreneurial fear of failure.": true,
|
||||
"Novel prospective research should include trials investigating the efficacy of CBT-I for patients with previously under-investigated comorbidities, the efficacy of adaptations of the CBT-I protocol compared to the standard protocol, follow-up periods longer than NUMBER mo, and the potential of CBT-I for the prevention of mental disorders.": false,
|
||||
"Motivated by our experimental findings that the quality of the information passed to the central system through final orders is significantly higher when the uniform allocation principle is applied, we propose a new application of the uniform principle that has several attractive properties in this setting.": true,
|
||||
"In this communication we investigate a novel facile and fast nebulization method with a continuous jet atomization device to nebulize formulations at a throughput well over NUMBER mL min with a minimum amount of shear stress enabling a large window to formulate lipid based nanoparticle drug carriers CITATION.": true,
|
||||
"In summary, we have developed novel divergent syntheses of NUMBER yaequinolone-related natural products, which are synthesized for the first time, by late-stage C-H olefination of NUMBER dioxygenated NUMBER aryl-NUMBER hydroxyquinolin-NUMBER NUMBER H-ones, core structures of this family of natural products.": false,
|
||||
"In our study, we find further heterogeneity across workers with a different job-skill CITATION complementary of human capital investments and NUMBER the multiplier potential of these investments for their skill development.": false,
|
||||
"In conclusion, we have demonstrated an integrated MWP signal processor using a network of three RRs in a single photonic chip that spectrally shape the PM spectrum, for the first time, to the best of our knowledge, to create a MWP notch filter with a high stopband rejection and enhanced filter performance.": true,
|
||||
"In Section NUMBER we demonstrate the potential of extending the proposed design to develop latticebased shells.": true,
|
||||
"Furthermore, while scholars have accumulated knowledge about innovative behavior in business contexts where innovation is nurtured, to fully understand'innovation by employees' we need to also address business contexts where innovation by employees is not overtly expected.": false,
|
||||
"Finally, we will propose potential developments that may help to improve the performance of current devices.": true,
|
||||
"Finally, we describe three potential randomized registrybased clinical trials in an adjuvant setting and for advanced disease with a high potential to be executed within the framework of an advanced ENSAT registry.": false,
|
||||
"By connecting several junctions, we can study effective NUMBER spin systems demonstrating the potential of our approach for analog spin-glass simulation.": true,
|
||||
"Both European and US experts NUMBER , NUMBER have emphasized the need for preclinical studies in the animal, for testing various methodologies to produce RDN lesions, evaluating safety and efficacy of novel RDN systems, developing various biomarkers and assessing potential non-blood pressure related benefits.": false,
|
||||
"As a proof of concept, we further discuss a prototype implementation for supporting future-based data streams on top of ABS, and discuss the impact of the use of these data streams in ABS on the performance in the implementation of a distributed application for the generation of social networks.": true,
|
||||
"Although models learned on sparse annotations achieve relatively lower accuracies than those using dense annotations, we show that using a semisupervised deep learning approach can help to close this performance gap while leveraging sparse annotations that can significantly reduce the costs of label generation.": true,
|
||||
"Addressing how to achieve community-based solutions in a malaria elimination trial in The Gambia, we developed the Community Lab of Ideas for Health CLIH: a participatory approach that enabled communities to shape trial implementation.": false,
|
||||
"Using a large panel of innovative firms in the Netherlands, this study shows that partner type diversity in a firm's alliance portfolio has an inverted U-shaped relationship with productivity and radical innovative performance and a positive relationship with incremental innovative performance.": false,
|
||||
"For the deployment of our prototype, we have chosen Amazon Web Service AWS IoT and its extension for edge computing i.e., Greengrass as the baseline IoT platform as it is one of the more mature IoT platforms available on the market and provide the machinery necessary for the realization of the defined deployment models.": false,
|
||||
"We summarized pre-clinical and clinical studies investigating whether physical exercise would improve muscle performance and whether this improvement would translate in a clinically meaningful benefit for patients with cancer, in terms of survival and quality of life.": false,
|
||||
"We then chose the most effective EO to continue with further tests using exposure to the treated oilseed rape plant surface as the method of exposure, expecting to find an effective concentration threshold for significant insecticidal efficacy.": false,
|
||||
"We show that LMX mediates the association between SDT and team performance and innovation as rated by team members, while collective narcissism mediates the association between SDT and supervisory ratings of team innovation and team performance.": false,
|
||||
"We propose a sample average approximation with importance sampling and pruning of dominated activities to solve the problem, and demonstrate that this method solves large instances quickly.": true,
|
||||
"We present a reliable, yet stable time-domain implementation of MDD that includes physical priors as a mechanism to improve kernel conditioning by transforming the model vector into a domain where the ill-posed nature of the inverse problem is significantly mitigated.": true,
|
||||
"We hope that the following chapters will provide the reader with many novel insights into the complex interaction between nutrition and exercise, allowing them to define more effective dietary strategies to improve health and performance.": false,
|
||||
"We find that while the decoupling method leads to an acceptable and convergent effective potential, the method does not solve the fine-tuning problem that is inherent to the hierarchy problem of multiple-scale theories.": false,
|
||||
"We find that contrary to popular belief, contracting has positive and significant impact on malt barley production, intensification, commercialization, quality improvement, and farm gate prices, ultimately resulting in increased net income and spillover into the productivity of other food crops.": true,
|
||||
"We experimentally show that, for the unknown disturbance situation at hand, the variable-gain controller can be automatically tuned using both ESC approaches to achieve the optimal system performance.": true,
|
||||
"We evaluated the assessment tool in two online studies-with participants in their own homes completing the task on their own digital devices-to show that the assessment tool can significantly predict scores from the Patient Health Questionnaire CITATION-a standard self-report tool for assessing depression in clinical contexts.": false,
|
||||
"We discover significant differences between middle slices and both basal and apical slices after training a state-of-the-art segmentation model on a large clinical dataset CITATION and testing it on three independent test datasets.": false,
|
||||
"We conducted interviews with NUMBER solo diners to investigate their experiences while eating alone, their motivations for using an ICT device, as well as the potential of such devices to contribute to healthy eating practices.": false,
|
||||
"We agree that there is a need for further research into the mechanisms of co-existence of cancer and comorbid diseases and the need for development and application of comorbidity assessment and management tools that are validated in the younger cohort.": false,
|
||||
"To this end, we propose a novel online market mechanism, EdgeDR, to achieve cost efficiency in edge demand response programs.": true,
|
||||
"To provide platform leaders with advice on how to create a sustainable digital platform, we examine how retail store activity on the digital platform affects consumer activity, and vice versa also known as cross-side network effects.": false,
|
||||
"To overcome this problem, we developed perfusion fixation methods for needle and wedge biopsies, NUMBER which significantly improved the preservation of the sinusoids, sinusoidal cells and endothelial fenestrae, enabling high resolution transmission electron microscopy TEM of all hepatic cell types in human liver biopsies.": true,
|
||||
"To demonstrate the model potential, we tested our platform at an immature NUMBER days in vitro and mature state NUMBER days in vitro of development.": false,
|
||||
"To address these clinical challenges, we have developed a bilayered, modular hydrogel system that enables the click functionalization of cartilage-and bone-specific biochemical cues to each layer.": true,
|
||||
"Third, on the basis of our first two hypotheses, we hypothesize that individual stakeholders observing a stakeholder-oriented firm will show more moral consideration for other stakeholders than individual stakeholders observing a profit-oriented firm, mediated by individual stakeholders' humanization of other stakeholders.": false,
|
||||
"Taken together, we not only provide a proof of concept by development of inhibitors to target disordered proteins, but we also provide novel technologies and simple methods to develop inhibitors for IDPsIDPRs.": true,
|
||||
"Recently, we have demonstrated on trapezia that the image quality of the CBCT device NewTom NUMBER G Cefla, Italy CITATION can be enhanced to reach an accuracy comparable to HR-pQCT in quantifying bone trabecular parameters CITATION.": true,
|
||||
"Our results show that LMX mediates the association between SDT and team performance and innovation as rated by team members, while collective narcissism mediates the association between SDT and supervisory ratings of team innovation and team performance.": false,
|
||||
"Our results demonstrate the potential of combining MB and DD methods in autonomous systems, while providing a proof of concept for KalmanNet in a challenging real-life scenario.": true,
|
||||
"Our research highlights the importance of developing a holistic picture of the mechanisms by which different signals of product quality affect consumption and decision-making in entertainment markets, considering simultaneous exposure to a range of market signals instead of considering different factors independently.": false,
|
||||
"Our findings reinforce the elevated potential of the Brazilian large families in revealing novel candidate genes or mechanisms of mutation leading to hearing loss.": false,
|
||||
"Our current findings have the potential to inform assessment of clinical reasoning performance in authentic e.g. Such work could also advance our understanding of context specificity, which leads to unwanted variation in physician performance.": false,
|
||||
"Now data are produced at a rapid pace that enables firms to analyze the effectiveness of potential CE relationships between firms, we are motivated to study how information systems can also facilitate circular decision making.": false,
|
||||
"Moreover, we analysed the combinatorial activity in a newly designed ex vivo bacteraemia model as well as the potential of the best combination peptide D-NUMBER with rifampicin to treat K. pneumonia e infections in vivo in a mouse abscess infection model, demonstrating effective clearing of the infection.": false,
|
||||
"More broadly, we point to significant opportunities from applied linguistics and big data analytics for the development of novel indicators to track tangible and intangible dimensions in the geography of innovation.": true,
|
||||
"Many supramolecular systems are complex to synthesize or to selfassemble into functional architectures, yet with progress we increase scalability as well as the simplicity of the architectures and the robustness of the self-assembly process.": true,
|
||||
"Lastly, we believe there is a dire need of additional clinical benchmark data-sets to improve upon the state-of-the-art in this area.": false,
|
||||
"In summary, we propose that Gibbs energy released during catalysis can be harnessed by enzymes in the form of work, which will ultimately lead to an enhancement of their effective diffusion Fig NUMBER A.": false,
|
||||
"In conclusion, we have developed a novel genetic adjuvant that for the first time employs the pyroptosis pathway to improve DNA vaccination against cancer.": true,
|
||||
"In chapter NUMBER we sought to develop a novel flow-cytometry-based high-throughput method that allows quantitation of the agglutinating potential of anti-pneumococcal antibodies.": true,
|
||||
"In addition, we discuss the clinical potential of TEVs as markers of cell state transitions including the acquisition of a treatmentresistant phenotype, and their potential as therapeutic targets for interventions such as the use of extracellular vesicle EV inhibitors to block their pro-tumoral activities.": true,
|
||||
"In addition, we discuss the clinical applicability of therapeutic ultrasound with respect to the main challenges that must be addressed to enable the further progression of therapeutic ultrasound towards an effective, safe and easy-to-use treatment tailored for drug delivery in patients.": true,
|
||||
"If we want to facilitate standardization in OoC by the development of an open platform, it will be essential that the platform finds widespread support.": false,
|
||||
"If we know how to quickly select the optimal or close to optimal trigger injecting position in backdoor attacks on GNNs, we can achieve high attack performance and good evasion of the defender's detection mechanisms.": false,
|
||||
"HTP in clinical decision making: Seven problems that occur in daily clinical practice are described and we show how HTP can enhance insight to formulate an adequate treatment strategy.": false,
|
||||
"Given advancements in mobile technology, an effective-CBT-I app could offer an opportunity to enhance the advantages and coverage provided by other formats of CBT-I, enabling real-time and personalized monitoring, assessment, and interventions CITATION.": false,
|
||||
"Finally, we use all the knowledge we acquired to propose recommendations for practitioners i.e., how they can use the findings of this paper to improve their testing skills, tool makers i.e., a list of tools that would improve the way developers do testing, and educators i.e., testing topics that should be taught at university-level.": false,
|
||||
"Finally, we suggest that B NUMBER B innovation practitioners adopt the stakeholder engagement journey as a process tool that links service design to innovation stages.": false,
|
||||
"Finally, we develop a Frank-Wolfe algorithm that can solve this convex program orders of magnitude faster than state-of-the-art general purpose solvers.": true,
|
||||
"Comparing with state of the art in localization, we demonstrate the superiority and robustness of the performance of FEEL.": true,
|
||||
"CONCLUSION: Our work NUMBER demonstrates the potential of our previously developed automated quality assurance methods to NUMBER generalize to external datasets.": true,
|
||||
"By elucidating the nature of the PD as a function of the potential, we can explain the universally observed bell-shaped curve for the FECO as a function of potential in relation to the effect of PD, cation concentration, and mass transport on the rate of the competing HER.": false,
|
||||
"As we have already discussed, convergence of leader and follower views with regard to their LMX quality will lead to increased development opportunities and career resources that can contribute to the follower's learning and growth, employability, and marketability.": false,
|
||||
"As a proof-of-concept, we develop a data-driven AI-based service scaling prototype to automate the service scaling operation to meet the service requirements while minimizing the consumption of resources.": true,
|
||||
"Applied to gold medal-winning parameterized SAT solvers, we show that our approach can produce significantly better-performing SAT solvers than state-ofthe-art parallel solvers constructed by human experts, reducing time-outs by NUMBER and running time PAR NUMBER score by NUMBER under competition conditions.": true,
|
||||
"Accordingly, we expect institutional investors to affect the implementation of strategy uniqueness, since they relate to both the type of investor putting the most pressure on CEOs CITATION, and also to the type of investor being best equipped to provide good monitoring and governance CITATION.": false,
|
||||
"A remarkable result in our model is that competition in the healthcare market does not necessarily improve care quality, which differs from previous literature.": false,
|
||||
"These encouraging data suggest that the novel enzyme and strain engineering approach represent a promising platform for the clinical development of CDEPT.": true,
|
||||
"As the paintings conservation field has rapidly discovered the potential of Evolon CR for varnish removal from oil paintings, the need to advance our understanding of this material and the steps necessary for safe and optimal usage increases.": false,
|
||||
"According to these latest concepts of clinical translation, we firmly believed that the a-TOS married NUMBER D MoS NUMBER as a promising theranostic platform can be employed to achieve the compelling efficacy and safety benefits for cancer theranostics.": true,
|
||||
"With great interest we read the article by CITATION CITATION, in which they demonstrate the potential of home monitoring to reduce hospital admissions by safely surveying clinical symptoms and vital parameters.": false,
|
||||
"While we showed how this may be effectively conducted for hard-sphere models, further research is needed to develop effective implementations for perfect sampling from a broad class of Gibbs point processes.": false,
|
||||
"While our work suggests potential for developing a SIGS approach for implementation in B. aeneus management, further experiments are needed to more fully explore the potential for incorporating this approach.": true,
|
||||
"We show that the proposed approaches compare favorably to several standard and state-of-the-art imputation methods in terms of predictive performance and runtime.": true,
|
||||
"We proceed by rigorously establishing limitations and unprecedented merits of this controller, further proposing appropriate modifications that guarantee improvements in terms of stability, robustness, and performance.": false,
|
||||
"We introduce an attention-based sequence-to-sequence OIE model that outperforms state-of-the-art network architectures, hereby demonstrating its effectiveness in information extraction tasks.": true,
|
||||
"We have developed a translation of CSX to SMT constraints which enables us to use constraint solving to find optimal configurations for finishers.": true,
|
||||
"We have demonstrated the potential of MCR chemistry by utilizing this privileged scaffold of proven interest in materials science and drug discovery.": true,
|
||||
"We first show that disjoint bilinear optimization problems can be cast as two-stage robust linear optimization problems with fixed-recourse and right-hand-side uncertainty, which enables us to apply robust optimization techniques to solve the resulting problems.": true,
|
||||
"We find that inventory allocations between the high and the low value channel are significantly different from optimal independent of whether profit differences between channels are high or low what we call profit conditions.": false,
|
||||
"We encourage researchers to investigate the usability, acceptance, feasibility, reliability, and clinical validity of wearable sensors in clinical populations to facilitate the application of wearable movement sensors in motor rehabilitation.": false,
|
||||
"We do believe that our general findings-that organizations' capacities and perspectives, embeddedness in a wide network, and other development work create multiple forms of representation, which may contribute to inclusive development-have the potential to form a starting point for this further research.": false,
|
||||
"We discuss implications for further adaptation of annotation tools, and the potential for deriving reference data from such rich annotation datasets for the evaluation of automatic pattern discovery algorithms in the future.": false,
|
||||
"We demonstrate experimentally for the first time that the proposed soft handover mechanism enables the seamless transmission to the mobile UD in the BS-ILC system.": true,
|
||||
"We conduct three sets of studies to demonstrate the potential of the proposed pseudonymization approach: NUMBER First, we validate the proposed approach through ABX pilot tests.": false,
|
||||
"We conclude that this form of data regime competition between China and the EU can give China an advantage in terms of promoting innovation in the electric car industry.": false,
|
||||
"We conclude that existing genetic risk scores can already improve life insurance underwriting, which stresses the urgency of policymakers to balance competing interests between stakeholders as this technology develops.": false,
|
||||
"We conclude it is important that all centres use an adequate, preferably uniform, registration system on innovation indicators and propose to select the system we used because it has been developed and approved by the sector itself.": false,
|
||||
"We argue that to advance service design opportunities for stakeholder engagement, we need to address the unique complexities and challenges of stakeholder engagement during innovation from a systemic and dynamic process perspective.": false,
|
||||
"We address this challenge by proposing alternative tariff designs, in terms of variable and fixed charges together with PV installation cost subsidies, that a regulator can implement to achieve a minimum solar energy target while guaranteeing network financing.": false,
|
||||
"Upon application of an RG step, the new effective local Hamiltonian that we find inside the causal cone will be renormalized to new effective couplings Ja', Jb', which correspond to effective lattice points A', B', respectively.": false,
|
||||
"To utilize the full potential of-omics driven biomarkers discovery studies, it will be essential to reach agreement on the best outcome reference standard in future studies, and we propose our diagnostic phenotyping algorithm as the best possible way to do so at present.": true,
|
||||
"To help address this need, our interdisciplinary team of clinicians, social scientists, bioethicists, designers, and computer scientists developed an innovative ICT framework for knowledge generation in chronic-pain research.": true,
|
||||
"To address this key gap, we broaden the theory of problemistic search for innovation by proposing a digitally enabled collaborative problemistic search CPS capability.": true,
|
||||
"To achieve a high level of UX, we address these user needs by introducing an interactive car door that enables passengers to explore the landscape in a more detailed and informative way using AR on the side window and a touch-sensitive door panel.": false,
|
||||
"This demonstrates the practicality of our study: we believe that researchers can build upon our work's findings by creating improved compiler validation methods and tools.": false,
|
||||
"These findings echo themes in how to improve humanitarian operations more generally, suggesting that finding effective ways to address these enduring challenges may significantly increase effective multi-hazard planning and response.": true,
|
||||
"The discovered effect is further confirmed by comparing the measurements to an advanced numerical model that we have developed earlier CITATION, with further implementation of the free-boundary conditions, showing excellent agreement to the measured data.": false,
|
||||
"Specifically, we extend the literature on social exchanges during opportunity development CITATION, NUMBER; by describing how entrepreneurs make sense of critical feedback from their stakeholders and by compiling the cognitive changes from novel sensemaking.": false,
|
||||
"Since our founding in NUMBER we have developed visualisation tools in our lab, deploying a number of immersion devices across a diversity of data sets and platforms CITATION, as well as across disciplines CITATION.": false,
|
||||
"Second, to improve the performance of MetaVC on large MinVC instances, we introduce a neural-network-based approach to enhance automatic configuration.": true,
|
||||
"Our study provided initial and promising evidence for the psychometric properties of the Italian version of a newly developed tool to measure burnout, namely the Burnout Assessment Tool, which intends to overcome some of the conceptual, methodological and practical limitations of the MBI.": false,
|
||||
"Our study demonstrated that the framework we conceived of IMSI and SDT can effectively be applied as a frame of analysis to identify essential features of sustainability in educational innovations.": true,
|
||||
"Our speed-accuracy trade-offs and effective spatial-contextual feature fusion allow us to outperform the previous state-of-the-art approaches for real-time semantic segmentation on two public datasets, namely Cityscapes dataset CITATION and UAVid dataset CITATION.": true,
|
||||
"Our results have demonstrated the feasibility and the great potential of on-chip SD-OCT systems.": true,
|
||||
"Our findings suggest that as nutrient availability increases under future climatic conditions, subarctic shrubs will develop increased resistance to biotic and abiotic stresses under rising temperature as opposed to under increased cloudiness, which could lead to decreased resistance.": false,
|
||||
"Our findings showed that these biomimetic micro-patterned substrates enabled cell disposal along architectural directions, thus appearing as promising substrates for developing functional TM replacements via TE.": true,
|
||||
"Only if the user knows how to integrate decision support tools into the complex tasks clinical judgement and decision-making we are able to test the full potential of these tools.": false,
|
||||
"Moreover, from our analysis, we conclude that the network assistance provides significant performance improvement, especially when the clients with identical interests compete for a bottleneck link's capacity.": false,
|
||||
"More interestingly, we find that using Bayesian shrinkage priors leads to superior out-of-sample performance for long-term investors.": true,
|
||||
"Merging findings with strands of social movement theory CITATION, I argued that state-funded sites of adult education in francophone Belgium demonstrate the potential to create empowering linkages to social movements.": false,
|
||||
"Introduction Our aim is to develop a novel approach to hyperkinetic movement disorder classification, that combines clinical information, electromyography, accelerometry and video in a computer-aided classification tool.": true,
|
||||
"In this work, we present numerical tools to explore such nonequilibrium effects in spatially confined three-dimensional systems with a variable disorder potential, giving exact solutions to leading order in the disorder potential and the applied electric field.": false,
|
||||
"In this review, we describe the application of several imaging techniques in the clinical practice of BM management, and the promising new developments that lie ahead.": false,
|
||||
"In this paper, the development and application of a public-client-led method is investigated that enabled the development and implementation of a radical green innovation in a civil engineering project.": false,
|
||||
"In this article, we showed that exploiting such information in a GBO setting, specifically one that allows for partial evaluations, can lead to substantial improvements in performance and scalability.": true,
|
||||
"In the past NUMBER years as a result of advances in hardware and software, DSS research has advanced dramatically, which has revealed the potential of this approach to substantially improve clinical care.": true,
|
||||
"In the next step of research, we can use deep learning to automatically extract the features of sound and images, and further improve the detection accuracy and generalization of the AVF method and we can also use better experimental platforms and equipment to improve the real-time performance of our algorithms.": true,
|
||||
"In supplementary fig. NUMBER we demonstrate initial feasibility Deep-ULM in clinical practice, by performing inference on clinical CEUS measurements of a patient's prostate using a standard ultrasound system Philips i CITATION in combination with a standard transrectal probe.": true,
|
||||
"In section NUMBER we propose our model for extracting needs from customer reviews; preliminary evaluation results appear in section NUMBER We revisit the need for needs in our discussion and conclusion.": false,
|
||||
"In line with Clarke and Crane's NUMBER definition of systemic change, therefore, we define transformative change as the result of actions that lead to a significant alteration a transformation within a system, potentially leading to substantial impacts involving economic, social, and ecological issues.": false,
|
||||
"In conclusion, we showed that bimiralisib gel NUMBER for topical use leads to I meaningful cutaneous drug levels, II well-tolerated systemic drug exposure in patients with MF and III a lack of clinical efficacy.": true,
|
||||
"If effective at improving lifestyle behaviors, this approach could be an important measure for all women with overweight or obesity with the potential to improve clinical outcomes for these women who are in the preconception period and are at high risk for pregnancy complications.": false,
|
||||
"However, we do suggest companies mix other adaptive innovation models such as agile development CITATION or the hybrid Agile-Stage-Gateapproach CITATION with their NPD processes to mitigate the negative effects of innovation process formality.": false,
|
||||
"However, the advantages of high avidity and the possibility of modulating their circulation time mean that MMIAs hold great potential, as revealed by clinical trials such as those for NUMBER I-cRGDY-PEG-C dots CITATION.": true,
|
||||
"Here we review the pharmacology of fevipiprant, the oral DP NUMBER receptor antagonist that reached the most advanced state of development to date in a worldwide Phase III clinical trial programme; however, the demonstrated efficacy did not support submission.": false,
|
||||
"Hence, by adding the temporal analysis to our DML framework, we help the system to discover higher semantic movements that enhance the discovery of discriminative personality patterns, and therefore, improve the personality recognition task.": true,
|
||||
"Furthermore, we extend existing findings on innovation vouchers that are limited to a narrow scope in terms of industry, type of collaboration partner and region CITATION by making use of a large-scale field experiment to test the effectiveness of a nationwide, all-industry program with a broad scope of potential partners.": false,
|
||||
"From the current literature, we incorporate two theoretical perspectives within the dynamic capability framework to explain how corporations achieve sustainable competitive advantages: organizational ambidexterity and open innovation CITATION.": false,
|
||||
"First, we develop a model that captures how family social capital is enhanced by shifting the level of analysis from the family business to the enterprise family CITATION.": false,
|
||||
"Finally, we will present some perspectives on future multidisciplinary clinical and experimental research to develop new, more effective sleep therapies to improve both sleep and PTSD.": false,
|
||||
"Finally, we propose a series of recommendations that should be applied to polyester clothing at all stages along the value chain, offering the potential for meaningful and effective change to improve the environmental sustainability of polyester textiles on a global scale.": false,
|
||||
"Finally, our work shows a systematic road toward the development of accurate effective patchy particle potentials.": true,
|
||||
"Finally, by prototyping real-life applications on both FPGA-based MPSoCs and desktop multi-core platforms, we demonstrate that mapping the alternative application specification results in a large performance gain compared to those approaches, in which alternative application specifications are not taken into account.": true,
|
||||
"Endovascular innovations such as steerable sheath technology, our continuously evolving technical skills, and development of dedicated mating stents for fenestrations have the potential to improve technical success and durability of this OTS device in the near future.": false,
|
||||
"Earlier reports developed by our group demonstrated that the spontaneous AsIII oxidation by granular activated carbon GAC combined with the biological FeII oxidation led to the precipitation of biogenic scorodite in batch experiments CITATION,providing a promising green strategy for the removal of arsenic from acidic wastewaters.": true,
|
||||
"Development of in situ and operando XPS techniques that can completely overcome the pressure gap is underway, and we believe it will lead to cornerstone advancements in understanding metal-support interactions in catalysis CITATION.": false,
|
||||
"CITATION Arguing for the potential of an indisciplinary space of action to facilitate \"democracy of experience\", CITATION we seek to develop a non-hierarchical design research that leads into the'de-compartmentalization of each discipline'.": false,
|
||||
"By performing detailed assessments of the predictive performance for the question pattern and content tasks, we ind that CNQG enables us to produce accurate patterns and semantically relevant topics, which provides an explanation for its strong performance.": false,
|
||||
"By carefully tweaking the imprinting parameters, we were able to increase the number of imprints on our chips, validated by SEM and fluorescence microscopy, leading to an improvement of the LoD by an entire order of magnitude for the thermal sensing platform.": true,
|
||||
"Because we have shown that a substantial number of essential developmental genes are significantly downregulated upon SON haploinsufficiency, SON thus represents a master regulator of genes essential for human neurodevelopmental processes.": false,
|
||||
"As an outlook, here, we formulated a proposal for a design concept that allows us to connect cultured nervous system tissues in a platform that will enable the detailed study of PD by NoCs as it is envisaged in the CONNECT NUMBER project as well as other devastating nervous system diseases.": false,
|
||||
"As a consequence, we were able to successfully improve the efficiency of speaking based learning using an adaptive system: Learners who studied using the response time-based SlimStampen algorithm produced faster responses with NUMBER percentage points higher accuracy compared to learners who used the accuracy-based Leitner learning algorithm.": true,
|
||||
"Conflicts of interest Prof. Geusens reports grants, speaker fees and advisory board from Amgen, grants from Pfizer, grants from MSD, grants from UCB, grants from Abbott, grants and speaker fees from Lilly, grants from BMS, grants from Novartis, grants from Roche, and grants from Will Pharma, outside the submitted work.": false,
|
||||
"As the material combination used in this work is superior for the optomechanical quantum transduction task than any other approach to date, additional adjustments to our platform can be used to significantly improve the performance of this new class of devices by several orders of magnitude.": true,
|
||||
"While our evaluation shows that we can link appropriate segments of the clinical study to risk factors, it is the development of the query interface that will demonstrate the significant reduction in manual effort that this work requires, and will greatly widen its impact.": false,
|
||||
"We suggest that acquirers can resolve this coordination-autonomy dilemma by recognizing that the effect of structural form on innovation outcomes depends on the developmental stage of acquired firms' innovation trajectories.": false,
|
||||
"We show that usual MHD boundary conditions can lead to the violation of this physical limit and we implement this current density limitation through a boundary condition for the electrostatic potential.": false,
|
||||
"We show that current approaches for solving multiple-follower problems are unsuitable for our new class of problems and instead we propose a novel analytics-based heuristic decomposition approach.": true,
|
||||
"We recognise that these initial reflections on the different regulatory tools may sound sceptical of the potential for regulators to successfully address the possible negative effects of AR.": false,
|
||||
"We propose a novel approach capable of efficiently solving the multi-year task allocation problem for a fleet of aircraft in a few minutes.": true,
|
||||
"We improve each of the individual defenses' performance over the state of the art, achieving overheads well below NUMBER for each of them.": true,
|
||||
"We implemented the proposed controller on an embedded platform, developed by Cohda Wireless and NXP, with the aim to validate that the theoretical performance of our approach also translates to a good performance in a realistic scenario.": true,
|
||||
"We hypothesized that by CITATION using a simple convolutional architecture, and CITATION-distribution, it is possible to achieve state-of-the-art probabilistic forecasting performance compared to existing Transformer-based methods whilst requiring significantly fewer parameters.": false,
|
||||
"We have successfully applied computational methods to develop HIPe which exhibits high potential to inhibit histone H NUMBER induced cell lysis and consequently shows therapeutic benefit effects in an atherosclerotic mouse model.": true,
|
||||
"We have shown that by leveraging the potential of many existing EarlyTSC algorithms, our approach can outperform any single algorithm, even when their hyperparameters are optimised.": true,
|
||||
"We have presented a scenario-and platform-aware design flow SPADe for IBC system implementation that considers both pipelining and parallelism in an integral fashion to improve QoC of multiprocessor IBC implementations.": false,
|
||||
"We find that dynamic, rule-based investment strategies can outperform traditional static strategies, by which we mean that the investor may achieve the target retirement income with a higher probability or limit the shortfall when the target is not met.": false,
|
||||
"We extend the current state-of-the-art by proposing a novel adaptive approach, called aDynaMOSA Adaptive Dy-naMOSA, to address the two challenges described above.": true,
|
||||
"We demonstrate that the TempEasy system has the ability to screen phenotypic and functional effects of cell-cell interactions in a quantitative way and we believe that it may serve as a promising platform for future cell-cell interaction studies.": true,
|
||||
"We compare results from these past experiments in Appendix B. We are able to experimentally resolve, for the first time, increased performance with greater QAOA depth and apply QAOA to cost functions on graphs that deviate significantly from our hardware connectivity.": true,
|
||||
"We believe that this hybrid ML-PB approach offers the potential in the long term-with the rise of exascale, quantum and analogue processing-to deliver novel pandemic drugs at pandemic speed.": true,
|
||||
"We argue that the concept mapping intervention can accelerate the development of adaptive capabilities as it facilitates the development of the knowledge structures that are needed for team adaptation, namely the team members' development of a shared understanding about their task, roles, and each other's expertise.": false,
|
||||
"We adopt an explanatory case study approach to contribute to the development of theory of disruptive innovation.": false,
|
||||
"We address this outstanding problem by developing a general framework for computing physical properties of quantum manybody states efficiently on NISQ devices.": false,
|
||||
"Using the novel classification system, we identified different types of papillae significantly associated with a lower efficacy of NKF and a prolonged time to obtain successful biliary cannulation using NKF.": false,
|
||||
"Using data from simulated power markets, we analyse the forward premium in three identical power markets with a varying market share of VRES supplied to the system.": false,
|
||||
"Ultimately, we strongly advise the implementation of funding schemes for sustainably supporting the development and maintenance of research software based on clear and transparent criteria, for creating incentives to produce high quality community software, and for enabling career paths as research software engineer RSE.": false,
|
||||
"To this end, we develop a systematic framework for assessment of sustainable hydropower potential that makes three folds improvements to existing methods.": true,
|
||||
"To this end we propose our AQOSA toolkit which has been developed to enable component-based development and automatically improve the non-functional properties of an architectural design, thus allow architects to focus on the higher-level design decisions.": true,
|
||||
"These empirical inconsistencies provide the impetus for our research as they demonstrate that there are gaps in our understanding of how and when team social capital affects team innovation, which may obscure the true nature of the team social network-team innovation relation.": false,
|
||||
"There are various potential models for development i development in children first by academia then to industry; ii joint development by academia and industry; iii standalone academic development within a business model.": false,
|
||||
"The unique advantage of our methodology is that it secures meaningful process waste analysis in two ways: CITATION via the RPG score, which enables scientists to compare the sustainability performance of their process with industry averages.": true,
|
||||
"Since most of the systems around us exhibit some form of nonlinear behavior, nonlinear system identification techniques are the tools that will help us gain a better understanding of our surroundings and potentially let us improve their performance.": false,
|
||||
"Overall, we hope to show in this Review and in the years to come that oxalic acid has great potential the future because of its large potential applications in the polymer market.": false,
|
||||
"Overall, as a proof-of-concept, here we investigated the therapeutic potential of TA-coated AcDXSp NPs, which allowed successfully deliver two drug compounds for cardiac proliferation in CMs.": true,
|
||||
"Our work, which takes a different route, not only sheds new light onto the unveiling of a gradient flow structure for CITATION, but also provides the well-posedness CITATION for a general class of interaction potentials, including the Newtonian potential, which we believe to be novel.": true,
|
||||
"Our study explains the size differentiation in creative industries on the basis of a founder's attention focus and values, which may lead to firm development and, possibly, growth.": false,
|
||||
"Our study demonstrates that entering foreign markets does not necessarily nor directly leads to growth in terms of employees or revenues, but more to an accretion of a creative firm's symbolic capital or impact.": false,
|
||||
"Our results lead us to the major conclusions: Although porosity observations converge to an effective value with increasing observation scale andor number of samples; spatial correlation of samples lead to higher REV levels as typically assumed.": false,
|
||||
"Our research shows the added value of iterative development and user feedback for improving and further development of the tool's usability and functionality.": false,
|
||||
"Our paper only introduces the REF as a way of structuring market evolution, and we suggest future studies are necessary to elaborate on how markets evolve in the cases we addressed, as well as in others.": false,
|
||||
"Our novel modular approach to operating an automated microfluidic system for parallelized cell culture will enable greater experimental flexibility and facilitate the cooperation of different chips from different labs.": true,
|
||||
"Our novel coproduction framework, based on a set of five principles and thirteen criteria, proved useful as an assessment tool, stimulating critical reflection from which we were able to evaluate the actual performance of the thirteen criteria.": false,
|
||||
"Our model outperforms two state-of-the-art matrix factorization-based approaches, demonstrating the effectiveness of integrating neighborhood features in a deep neural network for POI recommendation.": true,
|
||||
"Our experiments also indicate that our proposed semi-supervised reasoning method achieves a comparable performance as state-of-the-art fully supervised learning baselines for physician policy learning.": true,
|
||||
"Our experimental results indicate great potential for improving the accuracy of energy consumption prediction by using automated machine learning approaches.": true,
|
||||
"Our aim was to identify potential opportunities for improving weather and market advisory dissemination to rural communities and remote and underserved farmers in developing countries.": false,
|
||||
"Our aim was to define a minimum Overall Adult Health Standard Set that will enable outcome measurement in routine clinical practice to improve decision making between providers and patients aged NUMBER years or older, to facilitate quality improvement, and to allow for benchmarking across organizations.": false,
|
||||
"Likewise, the networks that grow out of prestigious US business schools and Wall Street institutional investors in the world's largest capital market have extended into CIC corporate headquarters and its asset allocation strategy.": false,
|
||||
"In future work, we plan to develop more sophisticated methods for identifying and terminating unpromising target algorithm runs, to further enhance automatic configuration.": true,
|
||||
"In all these application, the convolution surface based modelling method proposed in our work can show great advantages in its effectiveness and scalability.": true,
|
||||
"In agreement with our hypothesis, results show that interaural segregation cues led to improved behavioral word-recognition performance and stronger cortical segregation of the distractor speakers.": true,
|
||||
"In addition, we overview a proof-of-concept prototype of our tool that facilitates existing software engineering mechanisms to achieve the above-mentioned features of our framework.": true,
|
||||
"In addition, our models will enable more rapid, cost-effective assessment of the efficacy and cellular toxicity of future novel therapeutic compounds to treat the main pathologies related to endothelial dysfunction.": true,
|
||||
"In a previous search for existing drugs with the potential of targeting Cantu Syndrome, also resulting from increased I KATP, we found a set of candidate drugs that may also possess the potential to target DEND syndrome.": false,
|
||||
"In NUMBER we therefore started to study the feasibility of integrating the hyperthermia HN device into an MR scanner for noninvasive MR thermometry by developing a novel applicator: the MRcollar.": true,
|
||||
"In LoTSS-DR NUMBER we also performed significant post processing of the radio catalogues to enhance their scientific potential.": false,
|
||||
"Here, we follow an \"actualization\" perspective within the entrepreneurial opportunity discourse wherein entrepreneurial opportunities are defined as \"the propensity of market demand to be actualized into profits through the introduction of novel products or services\" CITATION.": false,
|
||||
"Hence, we have demonstrated the need for researchers to distinguish different groups of solo self-employed when identifying factors that may enhance their well-being and performance.": false,
|
||||
"Furthermore, we elaborate on ongoing developments such as the rise of comparable registries, increasing support for preregistration in the Netherlands-which led to the funding of PCT by the Dutch government-and pilots of mandatory preregistration by several funding bodies.": false,
|
||||
"Furthermore, we demonstrate that a further developed version of our system may be applied in a wide range of settings by showing the successful application of the system in an elderly population.": true,
|
||||
"Finally, we explored sustainable development pathways of the capital region and the potential of this framework to inform and guide policy.": false,
|
||||
"Extensive experiments and comprehensive analysis performed on two widely used datasets-Microsoft COCO and Flickr NUMBER K-show the effectiveness of the hybrid feature fusion framework in CMHF, in which the stateof-the-art matching performance is achieved by our proposed CMHF method.": true,
|
||||
"By connecting the composition of the food basket to the supply chain that is necessary to deliver it, we are able to increase the efficiency and effectiveness of WFP operations, ensuring that, with the funds available, WFP can continue to supply life-saving assistance to as many people in need as possible.": false,
|
||||
"Both the first steps that the US state appears to be taking towards a stronger market-direction role, and the ongoing market-direction role of the Chinese party state parallel to its extensive internal and external market creation, must be seen in the context of an increasing Sino-US geopolitical rivalry.": false,
|
||||
"Before a risk assessment tool can be implemented we need to know its discriminative accuracy, predictive value, cost-effectiveness, transportability e.g., to particular populations, ages and gender etc., and the general availability of its variables e.g., to enable cross-study comparison and result verification.": false,
|
||||
"As AB in early life have a major impact on microbiota development which may lead to aberrant immune maturation, NUMBER our findings accentuate the need for finding strategies to modify microbiome development after AB exposure to decrease the risk of allergies.": false,
|
||||
"An analysis of the tiles by a domain expert shows that our approach can lead to the discovery of novel insights.": false,
|
||||
"Altogether, our study demonstrates the potential of trehalosepullulan as the main material to produce antigen-containing dMNAs able to induce an immune response after application.": true,
|
||||
"Also, as a result of analyzing market information, the venture would develop an understanding of which potential corporate partners operate in those end markets that demonstrate best sales and profit potential for the end products that could be developed.": false,
|
||||
"Scope and approach: In this commentary we argue that addressing these governance challenges requires the development and adoption of novel research and innovation RI approaches that will provide evidence to inform food system transformation and will serve as catalysts for change.": false,
|
||||
"To improve the costtime performance of these algorithms, we developed gpuZoo which implements GPU-accelerated calculations, dramatically improving the performance of these algorithms.": true,
|
||||
"To facilitate and support effective implementation of the framework, we propose CITATION implementing strategies to facilitate the necessary behavioral changes in the PHW; CITATION implementing strategies to facilitate system changes and NUMBER identification of potential barriers and obstacles for the implementation of these strategies.": false,
|
||||
"This restricts their development from on-station prototypes a prototype developed at an experimental farm to farm-scale adoption adoption of these experimental prototypes on a large scale by farmers.": false,
|
||||
"These novel results show that development in manufacturing have potential for significant improvements in thermal-hydraulic efficiency.": false,
|
||||
"Section NUMBER demonstrates the efficacy of the proposed algorithm; discusses the properties of the discovered SIMPs; compares our approach to existing methods; and presents a case study in aviation, highlighting how our approach could help improve an analyst's understanding of the problem.": false,
|
||||
"Here, we demonstrate the potential for achieving worldwide standardization, ensured by PT, although international implementation the three-leveled sRM is a prerequisite for the success of such a program.": true,
|
||||
"Although our paper addresses a number of significant issues related to dynamic capabilities, open innovation and competitive firm performance, future studies are recommended to contribute to a further elaboration of the third component of open innovation: the inside-in innovation processes introduced in this paper.": false,
|
||||
"As we see that the tourism industry worldwide is facing several developments and challenges, including overcrowding, sustainability, and climate change, applying this technique to measure tourists' preferences and choices for new solutions and strategies to handle these problems seems like a promising approach.": false,
|
||||
"While the landscape of WIMP searches in the traditional GeV-TeV range appears to offer faltering returns for dark matter discovery, our study illustrates how future MeV gammaray detectors provide very promising prospects over several orders of magnitude in the dark matter mass.": true,
|
||||
"What we see is that the transfer price rule improves market performance as long as...rm A remains in the downstream market.": false,
|
||||
"We will also show that such a reduction in the number of reactive components leads to improved performance robustness to variations in the inductive link coupling factor.": false,
|
||||
"We were able to optimize our pilot-scale device to produce fibers with a diameter below NUMBER mm for the first time, thus offering an industrial solution for the preparation of melt-electrospun nanofibers.": true,
|
||||
"We want to stress the importance of tracing back how the methods we propose are implemented in the field to shape a more realistic picture and state of the art, providing us with the possibility to improve and iterate on our methods.": true,
|
||||
"We successfully developed a method for de novo FAIRification via an EDC system that automatically transforms eCRF data entered into the system into machine-readable, FAIR data by the use of a semantic data model and a data transformation application.": true,
|
||||
"We show that semibetas stemming from negative market and negative asset return covariation predict significantly higher future returns, while semibetas attributable to negative market and positive asset return covariation predict significantly lower future returns.": false,
|
||||
"We show that following the regulatory change, the sensitivity of fund flows and managerial turnover to portfolio holdings information significantly increases for high, relative to low, volatility funds.": false,
|
||||
"We show that a magnetization gradient of the vortex can act as an effective SOC, which leads to spin accumulation at the rims of the device.": false,
|
||||
"We propose a novel surrogate-assisted Evolutionary Algorithm for solving expensive combinatorial optimization problems.": true,
|
||||
"We propose a new attacker model, based on dynamic optimization, where we demonstrate that large, initial, fixed costs of exploit development induce attackers to delay implementation and deployment of exploits of vulnerabilities.": true,
|
||||
"We performed a small-scale proof-of-concept study to demonstrate that the platform can be used for drug development.": true,
|
||||
"We note several contextual factors that appear to affect actors' need fulfillment, including health-care structures and institutions e.g. New technologies encourage the development of innovative services that can create beneficial outcomes for multiple actors CITATION.": false,
|
||||
"We hope the workshop can serve as a platform for fruitful discussions of known problems with modeling user features to personalize conversational systems, and for connecting people working on and interested in personalized intelligent conversational systems that lead to new collaborations.": false,
|
||||
"We hope that further development of the model and advancement in experimental techniques will lead to better accuracy in the determination of the parameters of real metal surfaces.": false,
|
||||
"We hope that by sharing our practical experiences, we may enable future researchers to more effectively conduct clinical trials in these populations who could still gain much from improved clinical care.": false,
|
||||
"We have presented the detailed design of our approach, and our experimental results have shown that our solution can achieve significant performance improvement compared to a benchmark solution.": true,
|
||||
"We have developed a novel snapshot hyperspectral imaging camera with a large field of view as a prototype system for non-invasively interrogating superficial anatomic structures and for monitoring changes in microvascular perfusion and oxygenation.": true,
|
||||
"We explore the innovation performance benefits of alliances for spin-off firms, in particular spin-offs either from other firms or from public research organizations.": false,
|
||||
"We envisage that this work will serve as a platform for the accelerated development of isoxazoles and other novel chemotypes for the effective allosteric targeting of RORgt.": true,
|
||||
"We demonstrated the latter benefit for the problem of hierarchical time series forecasting, where we observed up to NUMBER improvement in point performance and up to NUMBER improvement in probabilistic forecasting performance.": false,
|
||||
"We demonstrate that in oxide growth at low temperatures two key points should be highlighted: i the strong dependence of surface potential on reactive oxygen coverage; ii the interrelation between exposure conditions and crystalline oxide formation.": false,
|
||||
"We demonstrate a novel automated solution for creating high-quality knowledge-based plans KBPs using proton and photon beams to identify patients for proton treatment based on their normal tissue complication probabilities NTCP.": true,
|
||||
"We conclude that increased funding availability, research development and data generation, and prioritization within a coordinated binational agenda are needed to advance in terms of water security for groundwater systems in the border region.": false,
|
||||
"We conclude that despite provincial government intervention in regional planning, the impact of market pressures, growth coalitions and institutional coordination problems prevent growth management policies from delivering the significant changes promised by the Ontario government.": false,
|
||||
"We coin this merged approach'Design to Market Thinking' D NUMBER MT, i.e. an integrative thinking approach that could help sustainable innovations to successfully enter the market.": true,
|
||||
"We also evaluate the hydraulic performance of the most promising network generation approach against the expected performance of the real system.": false
|
||||
}
|
||||
|
|
@ -1,5 +1,94 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Create an inference function\n",
|
||||
"\n",
|
||||
"Everything is ready to wrap the previously trained model and deploy it. \n",
|
||||
"\n",
|
||||
"First, we need to configure the LargeFileBackend, the TracingDatabase and GreatAI."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[38;5;226mThe value of `ENVIRONMENT` contains the \"ENV` prefix but `ENVIRONMENT` is not defined as an environment variable, using the default value defined above (`DEVELOPMENT`)\u001b[0m\n",
|
||||
"\u001b[38;5;226mEnvironment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
|
||||
"\u001b[38;5;39mMongoDbDriver has been already configured: skipping initialisation\u001b[0m\n",
|
||||
"\u001b[38;5;39mLargeFileS3 has been already configured: skipping initialisation\u001b[0m\n",
|
||||
"\u001b[38;5;39mGreatAI (v0.1.6): configured ✅\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 tracing_database: MongoDbDriver\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 large_file_implementation: LargeFileS3\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 is_production: False\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 should_log_exception_stack: True\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 prediction_cache_size: 4096\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 dashboard_table_size: 100\u001b[0m\n",
|
||||
"\u001b[38;5;226mYou still need to check whether you follow all best practices before trusting your deployment.\u001b[0m\n",
|
||||
"\u001b[38;5;226m> Find out more at https://se-ml.github.io/practices\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from great_ai.utilities import ConfigFile\n",
|
||||
"from great_ai.large_file import LargeFileS3\n",
|
||||
"from great_ai import configure, MongoDbDriver\n",
|
||||
"\n",
|
||||
"configuration = ConfigFile(\"config.ini\")\n",
|
||||
"\n",
|
||||
"LargeFileS3.configure_credentials_from_file(configuration)\n",
|
||||
"MongoDbDriver.configure_credentials_from_file(configuration)\n",
|
||||
"\n",
|
||||
"configure(\n",
|
||||
" dashboard_table_size=100, # traces are small, we can show many\n",
|
||||
" prediction_cache_size=4096, # predictions are expensive, cache them\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"For a pleasant developer experience, we create some typed models that will show up in the automatically generated OpenAPI schema specification and will also provide runtime type validation."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from typing import List\n",
|
||||
"from pydantic import BaseModel\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class Attention(BaseModel):\n",
|
||||
" weight: float\n",
|
||||
" token: str\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class EvaluatedSentence(BaseModel):\n",
|
||||
" score: float\n",
|
||||
" text: str\n",
|
||||
" explanation: List[Attention]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Even though `@use_model` caches the remote files locally and it also handles deserialising objects, we only use it to store a directory. In this case, it gives back a path, the path to that directory. So, we need to load the files from that folder ourselves. In order to only load it once per process, we create a small model loader helper function.\n",
|
||||
"\n",
|
||||
"> This is usually not needed, however, when we can outsmart `dill` so for optimisation purposes, we do it."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
|
|
@ -9,86 +98,95 @@
|
|||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[38;5;226m2022-07-01 14:28:43,377 | WARNING | Environment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,378 | INFO | Found credentials file (/data/projects/scoutinscience/platform/projects/highlights-service2/mongo.ini), initialising MongoDbDriver\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,379 | INFO | Found credentials file (/data/projects/scoutinscience/platform/projects/highlights-service2/s3.ini), initialising LargeFileS3\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,380 | INFO | Settings: configured ✅\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,380 | INFO | 🔩 tracing_database: MongoDbDriver\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,381 | INFO | 🔩 large_file_implementation: LargeFileS3\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,381 | INFO | 🔩 is_production: False\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,382 | INFO | 🔩 should_log_exception_stack: True\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,382 | INFO | 🔩 prediction_cache_size: 512\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:43,383 | INFO | 🔩 dashboard_table_size: 50\u001b[0m\n",
|
||||
"\u001b[38;5;226m2022-07-01 14:28:43,384 | WARNING | You still need to check whether you follow all best practices before trusting your deployment.\u001b[0m\n",
|
||||
"\u001b[38;5;226m2022-07-01 14:28:43,385 | WARNING | > Find out more at https://se-ml.github.io/practices/\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:44,082 | INFO | Latest version of scibert-highlights is 0 (from versions: 0)\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:44,083 | INFO | File scibert-highlights-0 found in cache\u001b[0m\n",
|
||||
"\u001b[38;5;39m2022-07-01 14:28:44,084 | INFO | File scibert-highlights-0 found in cache\u001b[0m\n"
|
||||
"\u001b[38;5;39mLatest version of scibert-highlights is 0 (from versions: 0)\u001b[0m\n",
|
||||
"\u001b[38;5;39mFile scibert-highlights-0 found in cache\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from great_ai import GreatAI, use_model, MongoDbDriver, configure\n",
|
||||
"from great_ai.utilities import clean\n",
|
||||
"from great_ai import use_model\n",
|
||||
"from pathlib import Path\n",
|
||||
"from typing import Tuple\n",
|
||||
"from transformers import (\n",
|
||||
" PreTrainedModel,\n",
|
||||
" PreTrainedTokenizer,\n",
|
||||
")\n",
|
||||
"from transformers import (\n",
|
||||
" AutoConfig,\n",
|
||||
" AutoModelForSequenceClassification,\n",
|
||||
" AutoTokenizer,\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"_tokenizer: PreTrainedTokenizer = None\n",
|
||||
"_loaded_model: PreTrainedModel = None\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"@use_model(\"scibert-highlights\", version=\"latest\", model_kwarg_name=\"model_path\")\n",
|
||||
"def get_tokenizer_and_model(\n",
|
||||
" model_path: Path, original_model: str = \"allenai/scibert_scivocab_uncased\"\n",
|
||||
") -> Tuple[PreTrainedTokenizer, PreTrainedModel]:\n",
|
||||
" global _tokenizer, _loaded_model\n",
|
||||
"\n",
|
||||
" if _tokenizer is None:\n",
|
||||
" _tokenizer = AutoTokenizer.from_pretrained(original_model)\n",
|
||||
"\n",
|
||||
" if _loaded_model is None:\n",
|
||||
" config = AutoConfig.from_pretrained(\n",
|
||||
" model_path, output_hidden_states=True, output_attentions=True\n",
|
||||
" )\n",
|
||||
" _loaded_model = AutoModelForSequenceClassification.from_pretrained(\n",
|
||||
" model_path, config=config\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" return _tokenizer, _loaded_model"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, implement the inference function."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from great_ai import GreatAI\n",
|
||||
"from great_ai.utilities import clean\n",
|
||||
"\n",
|
||||
"import re\n",
|
||||
"import numpy as np\n",
|
||||
"import torch\n",
|
||||
"from transformers.modeling_outputs import SequenceClassifierOutput\n",
|
||||
"from transformers import (\n",
|
||||
" PreTrainedModel,\n",
|
||||
" PreTrainedTokenizer,\n",
|
||||
")\n",
|
||||
"from views import EvaluatedSentence, Match\n",
|
||||
"from great_ai.large_file import LargeFileS3\n",
|
||||
"\n",
|
||||
"LargeFileS3.configure_credentials_from_file(\"config.ini\")\n",
|
||||
"MongoDbDriver.configure_credentials_from_file(\"config.ini\")\n",
|
||||
"configure(dashboard_table_size=100)\n",
|
||||
"\n",
|
||||
"ORIGINAL_MODEL = \"allenai/scibert_scivocab_uncased\"\n",
|
||||
"\n",
|
||||
"loaded_model: PreTrainedModel = None\n",
|
||||
"tokenizer: PreTrainedTokenizer = None\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"@GreatAI.create\n",
|
||||
"@use_model(\"scibert-highlights\", version=\"latest\")\n",
|
||||
"def find_highlights(sentence: str, model: Path) -> EvaluatedSentence:\n",
|
||||
" global loaded_model, tokenizer\n",
|
||||
"def find_highlights(sentence: str) -> EvaluatedSentence:\n",
|
||||
" \"\"\"Get the interestingness prediction of the input sentence using SciBERT.\n",
|
||||
"\n",
|
||||
" if loaded_model is None:\n",
|
||||
" config = AutoConfig.from_pretrained(\n",
|
||||
" model, output_hidden_states=True, output_attentions=True\n",
|
||||
" )\n",
|
||||
" loaded_model = AutoModelForSequenceClassification.from_pretrained(\n",
|
||||
" model, config=config\n",
|
||||
" )\n",
|
||||
" if tokenizer is None:\n",
|
||||
" tokenizer = AutoTokenizer.from_pretrained(ORIGINAL_MODEL)\n",
|
||||
" Run the SciBERT model in inference mode and evaluate the sentence.\n",
|
||||
" Additionally, provide explanation in the form of the last layer's sum attention\n",
|
||||
" between `[CLS]` and the other tokens.\n",
|
||||
" \"\"\"\n",
|
||||
"\n",
|
||||
" tokenizer, loaded_model = get_tokenizer_and_model()\n",
|
||||
" sentence = clean(sentence, convert_to_ascii=True, remove_brackets=True)\n",
|
||||
"\n",
|
||||
" return evaluate_sentence(sentence=sentence)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def evaluate_sentence(sentence: str) -> EvaluatedSentence:\n",
|
||||
" tensors = tokenizer(sentence, return_tensors=\"pt\", truncation=True, max_length=512)\n",
|
||||
"\n",
|
||||
" with torch.no_grad():\n",
|
||||
" with torch.inference_mode():\n",
|
||||
" result: SequenceClassifierOutput = loaded_model(**tensors)\n",
|
||||
" positive_likelihood = torch.nn.Softmax(dim=1)(result.logits)[0][1]\n",
|
||||
" tokens = tensors[\"input_ids\"][0]\n",
|
||||
"\n",
|
||||
" attentions = np.sum(result.attentions[-1].numpy()[0], axis=0)[0][\n",
|
||||
" 1:-1\n",
|
||||
" ] # Tuple of `torch.FloatTensor` (one for each layer) of shape `(batch_size, num_heads, sequence_length, sequence_length)`.\n",
|
||||
" matches = []\n",
|
||||
" attentions = np.sum(result.attentions[-1].numpy()[0], axis=0)[0][1:-1]\n",
|
||||
" # Tuple of `torch.FloatTensor` (one for each layer) of shape\n",
|
||||
" # `(batch_size, num_heads, sequence_length, sequence_length)`.\n",
|
||||
"\n",
|
||||
" explanation = []\n",
|
||||
"\n",
|
||||
" token_attentions = list(zip(attentions, tokens[1:-1]))\n",
|
||||
" for token in re.split(r\"([ .,])\", sentence):\n",
|
||||
|
|
@ -99,24 +197,101 @@
|
|||
" token, return_tensors=\"pt\", truncation=True, max_length=512\n",
|
||||
" )[\"input_ids\"][0][\n",
|
||||
" 1:-1\n",
|
||||
" ] # truncation=True needed to fix RuntimeError: Already borrowed\n",
|
||||
" score = 0\n",
|
||||
" ] # truncation=True needed to fix `RuntimeError: Already borrowed`\n",
|
||||
" weight = 0\n",
|
||||
" for t1 in bert_tokens:\n",
|
||||
" if not token_attentions:\n",
|
||||
" break\n",
|
||||
" a, t2 = token_attentions.pop(0)\n",
|
||||
" assert t1 == t2, sentence\n",
|
||||
" score += a\n",
|
||||
" matches.append(\n",
|
||||
" Match(phrase=token if token in \".,\" else \" \" + token, score=round(score, 4))\n",
|
||||
" weight += a\n",
|
||||
" explanation.append(\n",
|
||||
" Attention(\n",
|
||||
" token=token if token in \".,\" else \" \" + token, weight=round(weight, 4)\n",
|
||||
" )\n",
|
||||
" )\n",
|
||||
" if not token_attentions:\n",
|
||||
" break\n",
|
||||
"\n",
|
||||
" return EvaluatedSentence(\n",
|
||||
" score=positive_likelihood, text=sentence, explanation=matches\n",
|
||||
" score=positive_likelihood, text=sentence, explanation=explanation\n",
|
||||
" )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"A simple test to see everything works. Note that the models list is filled by the `@use_model` call even though it's not on the main inference function."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(Trace[EvaluatedSentence]({'created': '2022-07-16T18:47:29.581701',\n",
|
||||
" 'exception': None,\n",
|
||||
" 'feedback': None,\n",
|
||||
" 'logged_values': { 'arg:sentence:length': 51,\n",
|
||||
" 'arg:sentence:value': 'Our solution has outperformed the '\n",
|
||||
" 'state-of-the-art.'},\n",
|
||||
" 'models': [{'key': 'scibert-highlights', 'version': 0}],\n",
|
||||
" 'original_execution_time_ms': 7127.2063,\n",
|
||||
" 'output': { 'explanation': [ {'token': ' Our', 'weight': 0.3993},\n",
|
||||
" {'token': ' solution', 'weight': 0.3481},\n",
|
||||
" {'token': ' has', 'weight': 0.2945},\n",
|
||||
" {'token': ' outperformed', 'weight': 0.4011},\n",
|
||||
" {'token': ' the', 'weight': 0.1484},\n",
|
||||
" {'token': ' state-of-the-art', 'weight': 0.5727},\n",
|
||||
" {'token': '.', 'weight': 7.775}],\n",
|
||||
" 'score': 0.9991180300712585,\n",
|
||||
" 'text': 'Our solution has outperformed the state-of-the-art.'},\n",
|
||||
" 'tags': ['find_highlights', 'online', 'development'],\n",
|
||||
" 'trace_id': '56e20e94-79df-4793-ae61-d20820ebe2d3'}),\n",
|
||||
" Trace[EvaluatedSentence]({'created': '2022-07-16T18:47:37.020275',\n",
|
||||
" 'exception': None,\n",
|
||||
" 'feedback': None,\n",
|
||||
" 'logged_values': { 'arg:sentence:length': 36,\n",
|
||||
" 'arg:sentence:value': 'Their solution did not perform '\n",
|
||||
" 'well.'},\n",
|
||||
" 'models': [{'key': 'scibert-highlights', 'version': 0}],\n",
|
||||
" 'original_execution_time_ms': 170.7057,\n",
|
||||
" 'output': { 'explanation': [ {'token': ' Their', 'weight': 1.1475},\n",
|
||||
" {'token': ' solution', 'weight': 0.8205},\n",
|
||||
" {'token': ' did', 'weight': 0.3254},\n",
|
||||
" {'token': ' not', 'weight': 0.2921},\n",
|
||||
" {'token': ' perform', 'weight': 0.4293},\n",
|
||||
" {'token': ' well', 'weight': 0.2772},\n",
|
||||
" {'token': '.', 'weight': 4.4723}],\n",
|
||||
" 'score': 0.12305451184511185,\n",
|
||||
" 'text': 'Their solution did not perform well.'},\n",
|
||||
" 'tags': ['find_highlights', 'online', 'development'],\n",
|
||||
" 'trace_id': '7fcf8271-1738-4025-8305-d5a1e5100aea'}))"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"if __name__ == \"__main__\":\n",
|
||||
" find_highlights(\n",
|
||||
" \"Our solution has outperformed the state-of-the-art.\"\n",
|
||||
" ), find_highlights(\"Their solution did not perform well.\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"In this case, the service is built as a docker image, pushed to our image registry and subsequent rolling update is performed in the production cluster.\n",
|
||||
"To check out the Dockerimage, go to [the additional files page](/examples/scibert/additional-files)."
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
|
|
|||
50
docs/examples/scibert/index.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# Summarising scientific publications from a tech-transfer perspective
|
||||
|
||||
This is a simplified example illustrating how `great-ai` is used in practice at [ScoutinScience](https://www.scoutinscience.com/){ target=_blank }. The subpages show `great-ai` in action by going over the lifecycle of fine-tuning and deploying a BERT-based software service.
|
||||
|
||||
??? note "Propriety data"
|
||||
The purpose of this example is to show you different ways in which `great-ai` can assist you. The exact NLP task being solved is not central. Stemming from this and from the difficult nature of obtaining appropriate training data, the propriety dataset used for the experiments is not shared.
|
||||
|
||||
## Objectives
|
||||
|
||||
1. You will see how the [great_ai.utilities](/reference/utilities) can integrate into your Data Science workflow.
|
||||
2. You will see how [great_ai.large_file](/reference/large-file) can be used to version and store your trained model.
|
||||
3. You will see how [GreatAI][great_ai.GreatAI] should be used to prepare your model for a robust and responsible deployment.
|
||||
4. You will see multiple ways of customising your deployment.
|
||||
|
||||
## Overview
|
||||
|
||||
One of the core features of the ScoutinScience platform is summarising research papers from a tech-transfer perspective. In short, extractive summarisation is preferred using a binary classifier trained on clients' judgement of sentence interestingness. Thus, documents are sentences, and the expected output is a binary label showing whether a sentence is "worthy" of being in the tech-transfer summary. Explaining each decision is imperative since ScoutinScience embraces applying only explainable AI (XAI) methods wherever feasible.
|
||||
|
||||
!!! success
|
||||
You are ready to start the tutorial. Feel free to return to the [summary](#summary) section once you're finished.
|
||||
|
||||
<div style="display: flex; justify-content: space-evenly;" markdown>
|
||||
[:material-database: Examine data](data.ipynb){ .md-button .md-button--primary }
|
||||
|
||||
[:fontawesome-solid-chart-simple: Train model](train.ipynb){ .md-button .md-button--primary }
|
||||
|
||||
[:material-cloud-tags: Deploy service](deploy.ipynb){ .md-button .md-button--primary }
|
||||
</div>
|
||||
|
||||
## Summary
|
||||
|
||||
### [Data notebook](data.ipynb)
|
||||
|
||||
We load and analyse the data by calculating inter-rater reliability and checking the feasibility of using an AI-based approach by testing the accuracy of a trivial baseline method.
|
||||
|
||||
### [Training notebook](train.ipynb)
|
||||
|
||||
We simply fine-tune SciBERT.
|
||||
|
||||
After training and evaluating a model, it is exported using [great_ai.save_model][]. For more info, check out [the configuration how-to page](/how-to-guides/configure-service).
|
||||
|
||||
### [Deployment notebook](deploy.ipynb)
|
||||
|
||||
We customise the GreatAI configuration, create custom caching for the model and implement an inference function that can be hardened by wrapping it in a [GreatAI][great_ai.GreatAI] instance. We also extract the attention weights as a quasi-explanation.
|
||||
|
||||
Finally, we test the model's inference function through the GreatAI dashboard. [The only thing left is to deploy the hardened service properly.](/how-to-guides/use-service)
|
||||
|
||||
#### [Additional files](additional-files.md)
|
||||
|
||||
There are some other files required for deploying the notebook. For example, the config file for S3 and MongoDB or a Dockerfile for building a custom image. These are gathered and shown on a separate page.
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
torch
|
||||
transformers
|
||||
numpy
|
||||
|
|
@ -1,210 +1,90 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Fine-tune SciBERT\n",
|
||||
"\n",
|
||||
"We are planning to do a simple classification task on scientific text. For that, [SciBERT](https://github.com/allenai/scibert) is an ideal model to fine-tune since it has been pretrained of academic publications.\n",
|
||||
"\n",
|
||||
"This notebook was updated so that it can run in [Google Colab](https://colab.research.google.com/).\n",
|
||||
"\n",
|
||||
"First, we need to install the dependencies."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 48,
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"executionInfo": {
|
||||
"elapsed": 2529,
|
||||
"status": "ok",
|
||||
"timestamp": 1656596749103,
|
||||
"user": {
|
||||
"displayName": "Schmelczer András",
|
||||
"userId": "08401926777942666437"
|
||||
},
|
||||
"user_tz": -120
|
||||
},
|
||||
"id": "j7l0nD9hDQbB",
|
||||
"outputId": "88a9931b-396a-4cf1-c659-8a7b098b3cdd"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!pip install transformers datasets great-ai > /dev/null"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Load the training data from S3. (We have uploaded this to S3 in the `data` notebook.)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"evaluation-experiment-2-stage #1-2m6dmb.json\n",
|
||||
"evaluation-experiment-2-stage #1-sa6a0y.json\n",
|
||||
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
|
||||
"Requirement already satisfied: transformers in /usr/local/lib/python3.7/dist-packages (4.20.1)\n",
|
||||
"Requirement already satisfied: datasets in /usr/local/lib/python3.7/dist-packages (2.3.2)\n",
|
||||
"\u001b[31mERROR: Could not find a version that satisfies the requirement great-ai==0.0.6 (from versions: none)\u001b[0m\n",
|
||||
"\u001b[31mERROR: No matching distribution found for great-ai==0.0.6\u001b[0m\n"
|
||||
"\u001b[38;5;39mLatest version of summary-train-dataset-small is 0 (from versions: 0)\u001b[0m\n",
|
||||
"\u001b[38;5;39mFile summary-train-dataset-small-0 found in cache\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from pathlib import Path\n",
|
||||
"from great_ai.large_file import LargeFileS3\n",
|
||||
"import json\n",
|
||||
"\n",
|
||||
"annotations = []\n",
|
||||
"for p in Path(\".\").glob(\"*.json\"):\n",
|
||||
" with open(p, encoding=\"utf-8\") as f:\n",
|
||||
" print(p)\n",
|
||||
" annotations.append(json.load(f))\n",
|
||||
"LargeFileS3.configure_credentials_from_file(\"config.ini\")\n",
|
||||
"\n",
|
||||
"evaluations = {\n",
|
||||
" sentence: [\n",
|
||||
" annotation[sentence] for annotation in annotations if sentence in annotation\n",
|
||||
" ]\n",
|
||||
" for sentence in {\n",
|
||||
" sentence for annotation in annotations for sentence in annotation.keys()\n",
|
||||
" }\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"X = [s for s in evaluations.keys()]\n",
|
||||
"y = [int(sum(e) > 0) for e in evaluations.values()]\n",
|
||||
"\n",
|
||||
"# !pip install transformers datasets great-ai==0.0.6"
|
||||
"with LargeFileS3(\"summary-train-dataset-small\", encoding=\"utf-8\") as f:\n",
|
||||
" # splitting training and test data is done later by `datasets`\n",
|
||||
" X, y = json.load(f)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finetune SciBERT, for more info about this step, check out [HuggingFace](https://huggingface.co/docs/transformers/training).\n",
|
||||
"If you're only here for `great-ai`, feel free to skip the next cell."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/",
|
||||
"height": 1000,
|
||||
"referenced_widgets": [
|
||||
"9c57de70e68a41ecbde5093bd671715a",
|
||||
"9185277b1e5945a9a6a3ad75811bc86b",
|
||||
"4be5b3c59dc04aa2b92f51654e815589",
|
||||
"8e0ede9d1dd84c149a7e282211c7071b",
|
||||
"9bd5d2fb87bd428796155cc67d06b333",
|
||||
"bf773a86ec0a4899bb3636035f7ab35e",
|
||||
"22119b79eb514ad684cc3f00f519fb4a",
|
||||
"cb7ec6240337466d8833c70083e1c3cb",
|
||||
"34631de39509438aad98cbd3fc64c999",
|
||||
"32adc54185894f0598c2d9ad438c76e2",
|
||||
"981e11fb9d4f4a2ba28c011741a1eaba"
|
||||
]
|
||||
},
|
||||
"executionInfo": {
|
||||
"elapsed": 118131,
|
||||
"status": "ok",
|
||||
"timestamp": 1656593941974,
|
||||
"user": {
|
||||
"displayName": "Schmelczer András",
|
||||
"userId": "08401926777942666437"
|
||||
},
|
||||
"user_tz": -120
|
||||
},
|
||||
"id": "AL3etUQ3LtKN",
|
||||
"outputId": "fe00589f-64dd-4b70-e612-3873b504c00a"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Could not locate the tokenizer configuration file, will try to use the model config instead.\n",
|
||||
"loading configuration file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/858852fd2471ce39075378592ddc87f5a6551e64c6825d1b92c8dab9318e0fc3.03ff9e9f998b9a9d40647a2148a202e3fb3d568dc0f170dda9dda194bab4d5dd\n",
|
||||
"Model config BertConfig {\n",
|
||||
" \"_name_or_path\": \"allenai/scibert_scivocab_uncased\",\n",
|
||||
" \"attention_probs_dropout_prob\": 0.1,\n",
|
||||
" \"classifier_dropout\": null,\n",
|
||||
" \"hidden_act\": \"gelu\",\n",
|
||||
" \"hidden_dropout_prob\": 0.1,\n",
|
||||
" \"hidden_size\": 768,\n",
|
||||
" \"initializer_range\": 0.02,\n",
|
||||
" \"intermediate_size\": 3072,\n",
|
||||
" \"layer_norm_eps\": 1e-12,\n",
|
||||
" \"max_position_embeddings\": 512,\n",
|
||||
" \"model_type\": \"bert\",\n",
|
||||
" \"num_attention_heads\": 12,\n",
|
||||
" \"num_hidden_layers\": 12,\n",
|
||||
" \"pad_token_id\": 0,\n",
|
||||
" \"position_embedding_type\": \"absolute\",\n",
|
||||
" \"transformers_version\": \"4.20.1\",\n",
|
||||
" \"type_vocab_size\": 2,\n",
|
||||
" \"use_cache\": true,\n",
|
||||
" \"vocab_size\": 31090\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"loading file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/vocab.txt from cache at /root/.cache/huggingface/transformers/33593020f507d72099bd84ea6cd2296feb424fecd62d4a8edcc2a02899af6e29.38339d84e6e392addd730fd85fae32652c4cc7c5423633d6fa73e5f7937bbc38\n",
|
||||
"loading file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/tokenizer.json from cache at None\n",
|
||||
"loading file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/added_tokens.json from cache at None\n",
|
||||
"loading file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/special_tokens_map.json from cache at None\n",
|
||||
"loading file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/tokenizer_config.json from cache at None\n",
|
||||
"loading configuration file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/858852fd2471ce39075378592ddc87f5a6551e64c6825d1b92c8dab9318e0fc3.03ff9e9f998b9a9d40647a2148a202e3fb3d568dc0f170dda9dda194bab4d5dd\n",
|
||||
"Model config BertConfig {\n",
|
||||
" \"_name_or_path\": \"allenai/scibert_scivocab_uncased\",\n",
|
||||
" \"attention_probs_dropout_prob\": 0.1,\n",
|
||||
" \"classifier_dropout\": null,\n",
|
||||
" \"hidden_act\": \"gelu\",\n",
|
||||
" \"hidden_dropout_prob\": 0.1,\n",
|
||||
" \"hidden_size\": 768,\n",
|
||||
" \"initializer_range\": 0.02,\n",
|
||||
" \"intermediate_size\": 3072,\n",
|
||||
" \"layer_norm_eps\": 1e-12,\n",
|
||||
" \"max_position_embeddings\": 512,\n",
|
||||
" \"model_type\": \"bert\",\n",
|
||||
" \"num_attention_heads\": 12,\n",
|
||||
" \"num_hidden_layers\": 12,\n",
|
||||
" \"pad_token_id\": 0,\n",
|
||||
" \"position_embedding_type\": \"absolute\",\n",
|
||||
" \"transformers_version\": \"4.20.1\",\n",
|
||||
" \"type_vocab_size\": 2,\n",
|
||||
" \"use_cache\": true,\n",
|
||||
" \"vocab_size\": 31090\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"loading configuration file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/858852fd2471ce39075378592ddc87f5a6551e64c6825d1b92c8dab9318e0fc3.03ff9e9f998b9a9d40647a2148a202e3fb3d568dc0f170dda9dda194bab4d5dd\n",
|
||||
"Model config BertConfig {\n",
|
||||
" \"_name_or_path\": \"allenai/scibert_scivocab_uncased\",\n",
|
||||
" \"attention_probs_dropout_prob\": 0.1,\n",
|
||||
" \"classifier_dropout\": null,\n",
|
||||
" \"hidden_act\": \"gelu\",\n",
|
||||
" \"hidden_dropout_prob\": 0.1,\n",
|
||||
" \"hidden_size\": 768,\n",
|
||||
" \"initializer_range\": 0.02,\n",
|
||||
" \"intermediate_size\": 3072,\n",
|
||||
" \"layer_norm_eps\": 1e-12,\n",
|
||||
" \"max_position_embeddings\": 512,\n",
|
||||
" \"model_type\": \"bert\",\n",
|
||||
" \"num_attention_heads\": 12,\n",
|
||||
" \"num_hidden_layers\": 12,\n",
|
||||
" \"pad_token_id\": 0,\n",
|
||||
" \"position_embedding_type\": \"absolute\",\n",
|
||||
" \"transformers_version\": \"4.20.1\",\n",
|
||||
" \"type_vocab_size\": 2,\n",
|
||||
" \"use_cache\": true,\n",
|
||||
" \"vocab_size\": 31090\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"loading configuration file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/858852fd2471ce39075378592ddc87f5a6551e64c6825d1b92c8dab9318e0fc3.03ff9e9f998b9a9d40647a2148a202e3fb3d568dc0f170dda9dda194bab4d5dd\n",
|
||||
"Model config BertConfig {\n",
|
||||
" \"_name_or_path\": \"allenai/scibert_scivocab_uncased\",\n",
|
||||
" \"attention_probs_dropout_prob\": 0.1,\n",
|
||||
" \"classifier_dropout\": null,\n",
|
||||
" \"hidden_act\": \"gelu\",\n",
|
||||
" \"hidden_dropout_prob\": 0.1,\n",
|
||||
" \"hidden_size\": 768,\n",
|
||||
" \"initializer_range\": 0.02,\n",
|
||||
" \"intermediate_size\": 3072,\n",
|
||||
" \"layer_norm_eps\": 1e-12,\n",
|
||||
" \"max_position_embeddings\": 512,\n",
|
||||
" \"model_type\": \"bert\",\n",
|
||||
" \"num_attention_heads\": 12,\n",
|
||||
" \"num_hidden_layers\": 12,\n",
|
||||
" \"pad_token_id\": 0,\n",
|
||||
" \"position_embedding_type\": \"absolute\",\n",
|
||||
" \"transformers_version\": \"4.20.1\",\n",
|
||||
" \"type_vocab_size\": 2,\n",
|
||||
" \"use_cache\": true,\n",
|
||||
" \"vocab_size\": 31090\n",
|
||||
"}\n",
|
||||
"\n",
|
||||
"loading weights file https://huggingface.co/allenai/scibert_scivocab_uncased/resolve/main/pytorch_model.bin from cache at /root/.cache/huggingface/transformers/de14937a851e8180a2bc5660c0041d385f8a0c62b1b2ccafa46df31043a2390c.74830bb01a0ffcdeaed8be9916312726d0c4cd364ac6fc15b375f789eaff4cbb\n",
|
||||
"Some weights of the model checkpoint at allenai/scibert_scivocab_uncased were not used when initializing BertForSequenceClassification: ['cls.seq_relationship.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.bias', 'cls.seq_relationship.weight', 'cls.predictions.decoder.bias', 'cls.predictions.decoder.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.LayerNorm.weight']\n",
|
||||
"- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
|
||||
"- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
|
||||
"Some weights of BertForSequenceClassification were not initialized from the model checkpoint at allenai/scibert_scivocab_uncased and are newly initialized: ['classifier.bias', 'classifier.weight']\n",
|
||||
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
|
|
@ -219,24 +99,6 @@
|
|||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Asking to truncate to max_length but no maximum length is provided and the model has no predefined maximum length. Default to no truncation.\n",
|
||||
"PyTorch: setting up devices\n",
|
||||
"The default value for the training argument `--report_to` will change in v5 (from all installed integrations to none). In v5, you will need to use `--report_to all` to get the same behavior as now. You should start updating your code and make this info disappear :-).\n",
|
||||
"/usr/local/lib/python3.7/dist-packages/transformers/optimization.py:310: FutureWarning: This implementation of AdamW is deprecated and will be removed in a future version. Use the PyTorch implementation torch.optim.AdamW instead, or set `no_deprecation_warning=True` to disable this warning\n",
|
||||
" FutureWarning,\n",
|
||||
"***** Running training *****\n",
|
||||
" Num examples = 400\n",
|
||||
" Num Epochs = 50\n",
|
||||
" Instantaneous batch size per device = 32\n",
|
||||
" Total train batch size (w. parallel, distributed & accumulation) = 32\n",
|
||||
" Gradient Accumulation steps = 1\n",
|
||||
" Total optimization steps = 650\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
|
|
@ -330,61 +192,7 @@
|
|||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-13\n",
|
||||
"Configuration saved in models/checkpoint-13/config.json\n",
|
||||
"Model weights saved in models/checkpoint-13/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-91] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-26\n",
|
||||
"Configuration saved in models/checkpoint-26/config.json\n",
|
||||
"Model weights saved in models/checkpoint-26/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-117] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-39\n",
|
||||
"Configuration saved in models/checkpoint-39/config.json\n",
|
||||
"Model weights saved in models/checkpoint-39/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-130] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-52\n",
|
||||
"Configuration saved in models/checkpoint-52/config.json\n",
|
||||
"Model weights saved in models/checkpoint-52/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-143] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-65\n",
|
||||
"Configuration saved in models/checkpoint-65/config.json\n",
|
||||
"Model weights saved in models/checkpoint-65/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-156] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-78\n",
|
||||
"Configuration saved in models/checkpoint-78/config.json\n",
|
||||
"Model weights saved in models/checkpoint-78/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-13] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-91\n",
|
||||
"Configuration saved in models/checkpoint-91/config.json\n",
|
||||
"Model weights saved in models/checkpoint-91/pytorch_model.bin\n",
|
||||
"Deleting older checkpoint [models/checkpoint-26] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
" Batch size = 32\n",
|
||||
"Saving model checkpoint to models/checkpoint-104\n",
|
||||
"Configuration saved in models/checkpoint-104/config.json\n",
|
||||
"Model weights saved in models/checkpoint-104/pytorch_model.bin\n",
|
||||
"...\n",
|
||||
"Deleting older checkpoint [models/checkpoint-39] due to args.save_total_limit\n",
|
||||
"***** Running Evaluation *****\n",
|
||||
" Num examples = 100\n",
|
||||
|
|
@ -418,6 +226,7 @@
|
|||
" TrainingArguments,\n",
|
||||
" EarlyStoppingCallback,\n",
|
||||
")\n",
|
||||
"from pathlib import Path\n",
|
||||
"import numpy as np\n",
|
||||
"from datasets import Dataset, load_metric\n",
|
||||
"\n",
|
||||
|
|
@ -437,7 +246,7 @@
|
|||
" Dataset.from_dict({\"text\": X, \"label\": y})\n",
|
||||
" .map(lambda v: tokenizer(v[\"text\"], truncation=True), batched=True)\n",
|
||||
" .remove_columns(\"text\")\n",
|
||||
" .train_test_split(test_size=0.2, shuffle=True)\n",
|
||||
" .train_test_split(test_size=0.2, shuffle=True) # test is actually validation\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"f1_score = load_metric(\"f1\")\n",
|
||||
|
|
@ -474,13 +283,17 @@
|
|||
").train()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The best macro F1-score on the test set is **0.89** which is (not surprisingly) substantially more than the SVM achieved. We have a great model, it's time to deploy it. But first, we have to store it in a secure place."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 44,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"executionInfo": {
|
||||
"elapsed": 25368,
|
||||
"status": "ok",
|
||||
|
|
@ -514,387 +327,46 @@
|
|||
}
|
||||
],
|
||||
"source": [
|
||||
"from great_ai.large_file import LargeFileS3\n",
|
||||
"\n",
|
||||
"LargeFileS3.configure_credentials_from_file(\"config.ini\")\n",
|
||||
"from great_ai import save_model\n",
|
||||
"\n",
|
||||
"# save Torch model to local disk\n",
|
||||
"model.save_pretrained(\"pretrained\")\n",
|
||||
"LargeFileS3(\"scibert-highlights\").push(\"pretrained\")"
|
||||
"\n",
|
||||
"# upload model from local disk to S3\n",
|
||||
"# (because the S3 credentials have been already set, `save_model` will use LargeFileS3)\n",
|
||||
"save_model(\"pretrained\", key=\"scibert-highlights\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Next: [Part 3](/examples/scibert/deploy)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"accelerator": "GPU",
|
||||
"colab": {
|
||||
"collapsed_sections": [],
|
||||
"name": "Copy of Forms snippets",
|
||||
"provenance": [
|
||||
{
|
||||
"file_id": "/v2/external/notebooks/snippets/forms.ipynb",
|
||||
"timestamp": 1656585404621
|
||||
}
|
||||
]
|
||||
},
|
||||
"gpuClass": "standard",
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.10.4 ('.env': venv)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.4"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "02dd6d3afbfa9fbbe1037d64ad9014965528a1ccad21929d6e72f466389a68ad"
|
||||
}
|
||||
},
|
||||
"widgets": {
|
||||
"application/vnd.jupyter.widget-state+json": {
|
||||
"22119b79eb514ad684cc3f00f519fb4a": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "DescriptionStyleModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "DescriptionStyleModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "StyleView",
|
||||
"description_width": ""
|
||||
}
|
||||
},
|
||||
"32adc54185894f0598c2d9ad438c76e2": {
|
||||
"model_module": "@jupyter-widgets/base",
|
||||
"model_module_version": "1.2.0",
|
||||
"model_name": "LayoutModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/base",
|
||||
"_model_module_version": "1.2.0",
|
||||
"_model_name": "LayoutModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "LayoutView",
|
||||
"align_content": null,
|
||||
"align_items": null,
|
||||
"align_self": null,
|
||||
"border": null,
|
||||
"bottom": null,
|
||||
"display": null,
|
||||
"flex": null,
|
||||
"flex_flow": null,
|
||||
"grid_area": null,
|
||||
"grid_auto_columns": null,
|
||||
"grid_auto_flow": null,
|
||||
"grid_auto_rows": null,
|
||||
"grid_column": null,
|
||||
"grid_gap": null,
|
||||
"grid_row": null,
|
||||
"grid_template_areas": null,
|
||||
"grid_template_columns": null,
|
||||
"grid_template_rows": null,
|
||||
"height": null,
|
||||
"justify_content": null,
|
||||
"justify_items": null,
|
||||
"left": null,
|
||||
"margin": null,
|
||||
"max_height": null,
|
||||
"max_width": null,
|
||||
"min_height": null,
|
||||
"min_width": null,
|
||||
"object_fit": null,
|
||||
"object_position": null,
|
||||
"order": null,
|
||||
"overflow": null,
|
||||
"overflow_x": null,
|
||||
"overflow_y": null,
|
||||
"padding": null,
|
||||
"right": null,
|
||||
"top": null,
|
||||
"visibility": null,
|
||||
"width": null
|
||||
}
|
||||
},
|
||||
"34631de39509438aad98cbd3fc64c999": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "ProgressStyleModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "ProgressStyleModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "StyleView",
|
||||
"bar_color": null,
|
||||
"description_width": ""
|
||||
}
|
||||
},
|
||||
"4be5b3c59dc04aa2b92f51654e815589": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "FloatProgressModel",
|
||||
"state": {
|
||||
"_dom_classes": [],
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "FloatProgressModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/controls",
|
||||
"_view_module_version": "1.5.0",
|
||||
"_view_name": "ProgressView",
|
||||
"bar_style": "success",
|
||||
"description": "",
|
||||
"description_tooltip": null,
|
||||
"layout": "IPY_MODEL_cb7ec6240337466d8833c70083e1c3cb",
|
||||
"max": 1,
|
||||
"min": 0,
|
||||
"orientation": "horizontal",
|
||||
"style": "IPY_MODEL_34631de39509438aad98cbd3fc64c999",
|
||||
"value": 1
|
||||
}
|
||||
},
|
||||
"8e0ede9d1dd84c149a7e282211c7071b": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "HTMLModel",
|
||||
"state": {
|
||||
"_dom_classes": [],
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "HTMLModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/controls",
|
||||
"_view_module_version": "1.5.0",
|
||||
"_view_name": "HTMLView",
|
||||
"description": "",
|
||||
"description_tooltip": null,
|
||||
"layout": "IPY_MODEL_32adc54185894f0598c2d9ad438c76e2",
|
||||
"placeholder": "",
|
||||
"style": "IPY_MODEL_981e11fb9d4f4a2ba28c011741a1eaba",
|
||||
"value": " 1/1 [00:00<00:00, 5.38ba/s]"
|
||||
}
|
||||
},
|
||||
"9185277b1e5945a9a6a3ad75811bc86b": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "HTMLModel",
|
||||
"state": {
|
||||
"_dom_classes": [],
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "HTMLModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/controls",
|
||||
"_view_module_version": "1.5.0",
|
||||
"_view_name": "HTMLView",
|
||||
"description": "",
|
||||
"description_tooltip": null,
|
||||
"layout": "IPY_MODEL_bf773a86ec0a4899bb3636035f7ab35e",
|
||||
"placeholder": "",
|
||||
"style": "IPY_MODEL_22119b79eb514ad684cc3f00f519fb4a",
|
||||
"value": "100%"
|
||||
}
|
||||
},
|
||||
"981e11fb9d4f4a2ba28c011741a1eaba": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "DescriptionStyleModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "DescriptionStyleModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "StyleView",
|
||||
"description_width": ""
|
||||
}
|
||||
},
|
||||
"9bd5d2fb87bd428796155cc67d06b333": {
|
||||
"model_module": "@jupyter-widgets/base",
|
||||
"model_module_version": "1.2.0",
|
||||
"model_name": "LayoutModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/base",
|
||||
"_model_module_version": "1.2.0",
|
||||
"_model_name": "LayoutModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "LayoutView",
|
||||
"align_content": null,
|
||||
"align_items": null,
|
||||
"align_self": null,
|
||||
"border": null,
|
||||
"bottom": null,
|
||||
"display": null,
|
||||
"flex": null,
|
||||
"flex_flow": null,
|
||||
"grid_area": null,
|
||||
"grid_auto_columns": null,
|
||||
"grid_auto_flow": null,
|
||||
"grid_auto_rows": null,
|
||||
"grid_column": null,
|
||||
"grid_gap": null,
|
||||
"grid_row": null,
|
||||
"grid_template_areas": null,
|
||||
"grid_template_columns": null,
|
||||
"grid_template_rows": null,
|
||||
"height": null,
|
||||
"justify_content": null,
|
||||
"justify_items": null,
|
||||
"left": null,
|
||||
"margin": null,
|
||||
"max_height": null,
|
||||
"max_width": null,
|
||||
"min_height": null,
|
||||
"min_width": null,
|
||||
"object_fit": null,
|
||||
"object_position": null,
|
||||
"order": null,
|
||||
"overflow": null,
|
||||
"overflow_x": null,
|
||||
"overflow_y": null,
|
||||
"padding": null,
|
||||
"right": null,
|
||||
"top": null,
|
||||
"visibility": null,
|
||||
"width": null
|
||||
}
|
||||
},
|
||||
"9c57de70e68a41ecbde5093bd671715a": {
|
||||
"model_module": "@jupyter-widgets/controls",
|
||||
"model_module_version": "1.5.0",
|
||||
"model_name": "HBoxModel",
|
||||
"state": {
|
||||
"_dom_classes": [],
|
||||
"_model_module": "@jupyter-widgets/controls",
|
||||
"_model_module_version": "1.5.0",
|
||||
"_model_name": "HBoxModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/controls",
|
||||
"_view_module_version": "1.5.0",
|
||||
"_view_name": "HBoxView",
|
||||
"box_style": "",
|
||||
"children": [
|
||||
"IPY_MODEL_9185277b1e5945a9a6a3ad75811bc86b",
|
||||
"IPY_MODEL_4be5b3c59dc04aa2b92f51654e815589",
|
||||
"IPY_MODEL_8e0ede9d1dd84c149a7e282211c7071b"
|
||||
],
|
||||
"layout": "IPY_MODEL_9bd5d2fb87bd428796155cc67d06b333"
|
||||
}
|
||||
},
|
||||
"bf773a86ec0a4899bb3636035f7ab35e": {
|
||||
"model_module": "@jupyter-widgets/base",
|
||||
"model_module_version": "1.2.0",
|
||||
"model_name": "LayoutModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/base",
|
||||
"_model_module_version": "1.2.0",
|
||||
"_model_name": "LayoutModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "LayoutView",
|
||||
"align_content": null,
|
||||
"align_items": null,
|
||||
"align_self": null,
|
||||
"border": null,
|
||||
"bottom": null,
|
||||
"display": null,
|
||||
"flex": null,
|
||||
"flex_flow": null,
|
||||
"grid_area": null,
|
||||
"grid_auto_columns": null,
|
||||
"grid_auto_flow": null,
|
||||
"grid_auto_rows": null,
|
||||
"grid_column": null,
|
||||
"grid_gap": null,
|
||||
"grid_row": null,
|
||||
"grid_template_areas": null,
|
||||
"grid_template_columns": null,
|
||||
"grid_template_rows": null,
|
||||
"height": null,
|
||||
"justify_content": null,
|
||||
"justify_items": null,
|
||||
"left": null,
|
||||
"margin": null,
|
||||
"max_height": null,
|
||||
"max_width": null,
|
||||
"min_height": null,
|
||||
"min_width": null,
|
||||
"object_fit": null,
|
||||
"object_position": null,
|
||||
"order": null,
|
||||
"overflow": null,
|
||||
"overflow_x": null,
|
||||
"overflow_y": null,
|
||||
"padding": null,
|
||||
"right": null,
|
||||
"top": null,
|
||||
"visibility": null,
|
||||
"width": null
|
||||
}
|
||||
},
|
||||
"cb7ec6240337466d8833c70083e1c3cb": {
|
||||
"model_module": "@jupyter-widgets/base",
|
||||
"model_module_version": "1.2.0",
|
||||
"model_name": "LayoutModel",
|
||||
"state": {
|
||||
"_model_module": "@jupyter-widgets/base",
|
||||
"_model_module_version": "1.2.0",
|
||||
"_model_name": "LayoutModel",
|
||||
"_view_count": null,
|
||||
"_view_module": "@jupyter-widgets/base",
|
||||
"_view_module_version": "1.2.0",
|
||||
"_view_name": "LayoutView",
|
||||
"align_content": null,
|
||||
"align_items": null,
|
||||
"align_self": null,
|
||||
"border": null,
|
||||
"bottom": null,
|
||||
"display": null,
|
||||
"flex": null,
|
||||
"flex_flow": null,
|
||||
"grid_area": null,
|
||||
"grid_auto_columns": null,
|
||||
"grid_auto_flow": null,
|
||||
"grid_auto_rows": null,
|
||||
"grid_column": null,
|
||||
"grid_gap": null,
|
||||
"grid_row": null,
|
||||
"grid_template_areas": null,
|
||||
"grid_template_columns": null,
|
||||
"grid_template_rows": null,
|
||||
"height": null,
|
||||
"justify_content": null,
|
||||
"justify_items": null,
|
||||
"left": null,
|
||||
"margin": null,
|
||||
"max_height": null,
|
||||
"max_width": null,
|
||||
"min_height": null,
|
||||
"min_width": null,
|
||||
"object_fit": null,
|
||||
"object_position": null,
|
||||
"order": null,
|
||||
"overflow": null,
|
||||
"overflow_x": null,
|
||||
"overflow_y": null,
|
||||
"padding": null,
|
||||
"right": null,
|
||||
"top": null,
|
||||
"visibility": null,
|
||||
"width": null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
|
|
|||
|
|
@ -1,2 +0,0 @@
|
|||
from .evaluated_sentence import EvaluatedSentence
|
||||
from .match import Match
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
from typing import List
|
||||
|
||||
from pydantic import BaseModel
|
||||
|
||||
from .match import Match
|
||||
|
||||
|
||||
class EvaluatedSentence(BaseModel):
|
||||
score: float
|
||||
text: str
|
||||
explanation: List[Match]
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
from pydantic import BaseModel
|
||||
|
||||
|
||||
class Match(BaseModel):
|
||||
phrase: str
|
||||
score: float
|
||||
|
Before Width: | Height: | Size: 57 KiB |
BIN
docs/examples/simple-mag/mag-confusion.png
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 208 KiB |
|
|
@ -6,7 +6,7 @@
|
|||
"source": [
|
||||
"# Simple example: data engineering\n",
|
||||
"\n",
|
||||
"Here, we solve a problem similar to the tutorial's but with an explainable Naive Bayes classifier and more best-practices. In short, we train a domain classifier on the [semantic scholar dataset](https://api.semanticscholar.org/corpus) by taking full advantage of `great-ai`. Subsequently, we create a production-ready deployment.\n",
|
||||
"Here, we solve a problem similar to the tutorial's but with an explainable Naive Bayes classifier and more best practices. In short, we train a domain classifier on the [semantic scholar dataset](https://api.semanticscholar.org/corpus) by taking full advantage of `great-ai`. Subsequently, we create a production-ready deployment.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> The blue boxes show the steps of a typical AI-development lifecycle implemented in this notebook.\n",
|
||||
|
|
@ -87,7 +87,7 @@
|
|||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"100%|██████████| 4/4 [04:42<00:00, 70.62s/it] \n"
|
||||
"100%|██████████| 4/4 [04:22<00:00, 65.51s/it] \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
|
@ -105,10 +105,9 @@
|
|||
"\n",
|
||||
"\n",
|
||||
"def preprocess_chunk(chunk_key: str) -> List[Tuple[str, List[str]]]:\n",
|
||||
" # Extract\n",
|
||||
" response = urllib.request.urlopen(\n",
|
||||
" f\"https://s3-us-west-2.amazonaws.com/ai2-s2-research-public/\"\n",
|
||||
" \"open-corpus/2022-02-01/{chunk_key}\"\n",
|
||||
" f\"open-corpus/2022-02-01/{chunk_key}\"\n",
|
||||
" ) # a gzipped JSON Lines file\n",
|
||||
"\n",
|
||||
" decompressed = gzip.decompress(response.read())\n",
|
||||
|
|
@ -167,9 +166,29 @@
|
|||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[38;5;226mEnvironment variable ENVIRONMENT is not set, defaulting to development mode ‼️\u001b[0m\n",
|
||||
"\u001b[38;5;226mCannot find credentials files, defaulting to using ParallelTinyDbDriver\u001b[0m\n",
|
||||
"\u001b[38;5;226mThe selected tracing database (ParallelTinyDbDriver) is not recommended for production\u001b[0m\n",
|
||||
"\u001b[38;5;226mCannot find credentials files, defaulting to using LargeFileLocal\u001b[0m\n",
|
||||
"\u001b[38;5;39mGreatAI (v0.1.6): configured ✅\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 tracing_database: ParallelTinyDbDriver\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 large_file_implementation: LargeFileLocal\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 is_production: False\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 should_log_exception_stack: True\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 prediction_cache_size: 512\u001b[0m\n",
|
||||
"\u001b[38;5;39m 🔩 dashboard_table_size: 50\u001b[0m\n",
|
||||
"\u001b[38;5;226mYou still need to check whether you follow all best practices before trusting your deployment.\u001b[0m\n",
|
||||
"\u001b[38;5;226m> Find out more at https://se-ml.github.io/practices\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from great_ai import add_ground_truth\n",
|
||||
"\n",
|
||||
|
|
|
|||
BIN
docs/examples/simple/ss-confusion.png
Normal file
|
After Width: | Height: | Size: 2.7 MiB |
BIN
docs/examples/simple/ss-distribution.png
Normal file
|
After Width: | Height: | Size: 792 KiB |
117
docs/examples/simple/stacked-bars.ipynb
Normal file
|
|
@ -1,9 +1,11 @@
|
|||
# Explanation
|
||||
|
||||
A lot more details and discussion about the problem context and approaches of GreatAI along with its evaluation can be found in my thesis.
|
||||
A lot more details and discussion about the problem context and approaches of GreatAI, along with its evaluation, can be found in my thesis.
|
||||
|
||||

|
||||
<div style="display: flex; justify-content: center;">
|
||||
<img src="/media/thesis-frontpage.png" style="height: 500px;" alt="front page"/>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; justify-content: space-evenly;" markdown>
|
||||
[::fontawesome-solid-graduation-cap: Download (available soon)](thesis/main.pdf){ .md-button .md-button--primary }
|
||||
[::fontawesome-solid-graduation-cap: Download](thesis/main.pdf){ .md-button .md-button--primary download="greatai_schmelczer.pdf" }
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# How to call remote GreatAI instances
|
||||
|
||||
Microservices architecture (or [SOA](https://en.wikipedia.org/wiki/Service-oriented_architecture)) work well with ML applications. This is because their interfaces are usually very narrow, while the functionality provided quite comprehensive. Hence, drawing the boundaries of responsibilities is more straightforward in the case of ML services than in the case of more traditional business applications. For this reason, it is common to have a tree of models (preferably wrapped in GreatAI instances) communicating with each other.
|
||||
Microservices architecture (or [SOA](https://en.wikipedia.org/wiki/Service-oriented_architecture)) work well with ML applications. This is because their interfaces are usually very narrow, while the functionality provided is quite comprehensive. Hence, drawing the boundaries of responsibilities is more straightforward in the case of ML services than in the case of more traditional business applications. For this reason, it is common to have a tree of models (preferably wrapped in GreatAI instances) communicating with each other.
|
||||
|
||||
Although regular HTTP POST requests could be sent to each service's `/predict` endpoint, `great-ai` comes with two convenience functions: [call_remote_great_ai][great_ai.call_remote_great_ai] and [call_remote_great_ai_async][great_ai.call_remote_great_ai_async] to wrap this request. These provide you with some level of robustness and deserialisation.
|
||||
|
||||
|
|
@ -44,21 +44,21 @@ results = [
|
|||
print(results)
|
||||
```
|
||||
|
||||
1. Only return the outputs so we don't clutter up the terminal.
|
||||
1. Only return the outputs, so we don't clutter up the terminal.
|
||||
|
||||
> Run this script as a regular Python script by executing `python3 client.py`.
|
||||
|
||||
{ loading=lazy }
|
||||
|
||||
As you can see, everything worked as expected. There is one way to improve it though.
|
||||
As you can see, everything worked as expected. There is one way to improve it, though.
|
||||
## An `async` example
|
||||
|
||||
Let's send multiple requests at the same time to speed up the overall execution time. To do this, we will use the [call_remote_great_ai_async][great_ai.call_remote_great_ai_async] function.
|
||||
Let's send multiple requests simultaneously to speed up the overall execution time. To do this, we will use the [call_remote_great_ai_async][great_ai.call_remote_great_ai_async] function.
|
||||
|
||||
??? note "Why is this possible?"
|
||||
Note, that in `server.py`, the inference function is declared `async`. This means that multiple "copies" of it can run at the same time in the same thread. Since, there is no CPU-bottleneck, the server has a quite large throughpout (requests responded to per second), but its latency will stay around 2 seconds due to the async `sleep` command.
|
||||
Note that in `server.py`, the inference function is declared `async`. This means that multiple "copies" of it can run at the same time in the same thread. Since there is no CPU bottleneck, the server has a quite large throughput (requests responded to per second), but its latency will stay around 2 seconds due to the async `sleep` command.
|
||||
|
||||
If your great-ai server is not `async`, higher throughput can be achieved by running multiple instances of it, either manually, or by running it with multiple `uvicorn` workers like this: `ENVIRONMENT=production great-ai server.py --worker_count 4`
|
||||
If your great-ai server is not `async`, higher throughput can be achieved by running multiple instances of it, either manually or by running it with multiple `uvicorn` workers like this: `ENVIRONMENT=production great-ai server.py --worker_count 4`
|
||||
|
||||
### Async client
|
||||
|
||||
|
|
@ -84,8 +84,8 @@ async def main():
|
|||
asyncio.run(main())
|
||||
```
|
||||
|
||||
> Replace `client.py` with this async client. Note that even though async support is significantly more streamlined in recent Python versions, it still requires a bit more boilerplate than its synchronous counterpart.
|
||||
> Replace `client.py` with this async client. Note that although async support is significantly more streamlined in recent Python versions, it still requires a bit more boilerplate than its synchronous counterpart.
|
||||
|
||||
{ loading=lazy }
|
||||
|
||||
This also works, and in some use cases might be considerably quicker.
|
||||
This also works and might be considerably quicker in some use cases.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# How to configure GreatAI
|
||||
|
||||
GreatAI aims to provide reasonable defaults wherever possible. The current configuration is always prominently displayed (and updated) on the dashboard and in the command-line startup banner.
|
||||
GreatAI aims to provide reasonable defaults wherever possible. The current configuration is always prominently displayed (and updated) on the dashboard and in the command-line start-up banner.
|
||||
|
||||
## Using [great_ai.configure][]
|
||||
|
||||
|
|
@ -28,8 +28,8 @@ configure(
|
|||
)
|
||||
```
|
||||
|
||||
1. Completely disable caching.
|
||||
2. The unspecified routes are enabled by default.
|
||||
1. Completely disable caching.
|
||||
2. The unspecified routes are enabled by default.
|
||||
|
||||
## Using remote storage
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ The only aspect that cannot be automated is choosing the backing storage for the
|
|||
|
||||
Right now, you have 3 options for storing the models and large datasets: [LargeFileLocal][great_ai.large_file.LargeFileLocal], [LargeFileMongo][great_ai.large_file.LargeFileMongo], and [LargeFileS3][great_ai.large_file.LargeFileS3].
|
||||
|
||||
Without explicit configuration, [LargeFileLocal][great_ai.large_file.LargeFileLocal] is selected by default. This one still version-controls your files but it only stores them in a local path.
|
||||
Without explicit configuration, [LargeFileLocal][great_ai.large_file.LargeFileLocal] is selected by default. This one still version-controls your files but it only stores them in a local path (which of course can be a remote volume attached by [NFS](https://en.wikipedia.org/wiki/Network_File_System){ target=_blank }, [HDFS](https://hadoop.apache.org/docs/r1.2.1/hdfs_design.html){ target=_blank }, etc.).
|
||||
|
||||
!!! important
|
||||
If your working directory contains a `mongo.ini` or `s3.ini` file, an attempt is made to auto-configure [LargeFileMongo][great_ai.large_file.LargeFileMongo] or [LargeFileS3][great_ai.large_file.LargeFileS3] respectively.
|
||||
|
|
@ -63,7 +63,7 @@ model = [4, 3]
|
|||
save_model(model, 'my-model')
|
||||
```
|
||||
|
||||
1. This line isn't strictly necceseary because if `s3.ini` (or `mongo.ini`) is available in the current working directory, they are automatically used to configure their respective LargeFile implementations/databases.
|
||||
1. This line isn't strictly necessary because if `s3.ini` (or `mongo.ini`) is available in the current working directory, they are automatically used to configure their respective LargeFile implementations/databases.
|
||||
|
||||
??? note "Departing from AWS"
|
||||
With the `aws_endpoint_url` argument, it is possible to use any other S3-compatible service such as [Backblaze](https://www.backblaze.com/){ target=_blank }. In that case, it would be `aws_endpoint_url=https://s3.us-west-002.backblazeb2.com`.
|
||||
|
|
@ -77,7 +77,7 @@ MONGO_CONNECTION_STRING=mongodb://localhost:27017 # this is the default value
|
|||
# if `MONGO_CONNECTION_STRING` is specified, this default is overridden
|
||||
MONGO_CONNECTION_STRING=ENV:MONGO_CONNECTION_STRING
|
||||
|
||||
MONGO_DATABASE=my-database # it is automatically created if doesn't exist
|
||||
MONGO_DATABASE=my-database # it is automatically created if it doesn't exist
|
||||
```
|
||||
|
||||
```python title="use-mongo.py"
|
||||
|
|
@ -99,4 +99,4 @@ By default, a thread-safe version of [TinyDB](https://tinydb.readthedocs.io/en/l
|
|||
|
||||
### MongoDB
|
||||
|
||||
At the moment, only MongoDB is supported as a production-ready `TracingDatabase`. In order to use it, you have to either place a file named `mongo.ini` in your working directory, or explicitly call [MongoDbDriver.configure_credentials_from_file][great_ai.MongoDbDriver] or [MongoDbDriver.configure_credentials][great_ai.MongoDbDriver.configure_credentials].
|
||||
Currently, only MongoDB is supported as a production-ready `TracingDatabase`. In order to use it, you have to either place a file named `mongo.ini` in your working directory or explicitly call either [MongoDbDriver.configure_credentials_from_file][great_ai.MongoDbDriver] or [MongoDbDriver.configure_credentials][great_ai.MongoDbDriver.configure_credentials].
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# How to create a GreatAI service
|
||||
|
||||
The core value of `great-ai` lies in its [GreatAI][great_ai.GreatAI] class. In order to take advantage of it, you need to create an instance wrapping your code.
|
||||
The core value of `great-ai` lies in its [GreatAI][great_ai.GreatAI] class. To take advantage of it, you need to create an instance wrapping your code.
|
||||
|
||||
Let's say that you have the following greeter function:
|
||||
|
||||
|
|
@ -20,11 +20,11 @@ def greeter(your_name):
|
|||
```
|
||||
|
||||
??? info "Why not simply use `@GreatAI?`"
|
||||
The purpose of the [@GreatAI.create][great_ai.GreatAI.create] is simply to provide you with type-checking through MyPy, Pylance, and similar libraries. However, the overloading support for `__new__` is lacking in MyPy, thus, a static factory method is used instead.
|
||||
The purpose of [@GreatAI.create][great_ai.GreatAI.create] is simply to provide you with type-checking through MyPy, Pylance, and similar libraries. However, the overloading support for `__new__` is lacking in MyPy. Thus, a static factory method is used instead.
|
||||
|
||||
## With types
|
||||
|
||||
Even though it's not required by GreatAI, [type annotating your codebase](https://realpython.com/python-type-checking/){ target=_blank } can save you from lots of trivial mistakes, that's why it's highly advised. Simply add the expected types to your function's signature.
|
||||
Even though it's not required by GreatAI, [type annotating your codebase](https://realpython.com/python-type-checking/){ target=_blank } can save you from lots of trivial mistakes; that's why it's highly advised. Simply add the expected types to your function's signature.
|
||||
|
||||
```python title="type_safe_greeter.py"
|
||||
from great_ai import GreatAI
|
||||
|
|
@ -34,11 +34,11 @@ def type_safe_greeter(your_name: str) -> str:
|
|||
return f'Hi {your_name}!'
|
||||
```
|
||||
|
||||
This not only allows you to statically typecheck your code, but by default, GreatAI will check it during runtime as well using [typeguard](https://github.com/agronholm/typeguard){ target=_blank }.
|
||||
This not only allows you to statically type-check your code, but by default, GreatAI will check it during runtime as well using [typeguard](https://github.com/agronholm/typeguard){ target=_blank }.
|
||||
|
||||
## With async
|
||||
|
||||
Asynchronous code can result in immense performance gains in certain cases. For example, you might rely on a third-party service, do database access, or [call a remote GreatAI instance](/how-to-guides/call-remote). In these cases, you can simply make your function `async` without any other changes.
|
||||
Asynchronous code can result in immense performance gains in some instances. For example, you might rely on a third-party service, do database access, or [call a remote GreatAI instance](/how-to-guides/call-remote). In these cases, you can make your function `async` without any other changes.
|
||||
|
||||
```python title="async_greeter.py"
|
||||
from great_ai import GreatAI
|
||||
|
|
@ -46,13 +46,13 @@ from asyncio import sleep
|
|||
|
||||
@GreatAI.create
|
||||
async def async_greeter(your_name: str) -> str:
|
||||
await sleep(2) # simulate IO-heavy operation
|
||||
await sleep(2) # simulate IO-bound operation
|
||||
return f'Hi {your_name}!'
|
||||
```
|
||||
|
||||
## With decorators
|
||||
|
||||
GreatAI can decorate already decorated functions. The only restriction is that [@GreatAI.create][great_ai.GreatAI.create] always has to come last. There are two built-in decorators that you can use to customise your function but you can you use any third-party decorator as well.
|
||||
GreatAI can decorate already decorated functions. The only restriction is that [@GreatAI.create][great_ai.GreatAI.create] must come last. There are two built-in decorators that you can use to customise your function, but you can use any third-party decorator as well.
|
||||
|
||||
### Using `@use_model`
|
||||
|
||||
|
|
@ -69,10 +69,10 @@ def type_safe_greeter(your_name: str, model) -> str:
|
|||
assert type_safe_greeter('Andras').output == 'Hi Andras'
|
||||
```
|
||||
|
||||
1. By default, the parameter named `model` will be replaced by the loaded model. This behaviour can be customised by setting the `model_kwarg_name`. This way, even multiple models can be injected into a single function.
|
||||
1. By default, the parameter named `model` will be replaced by the loaded model. This behaviour can be customised by setting the `model_kwarg_name`. This way, even multiple models can be injected into a single function.
|
||||
|
||||
!!! important
|
||||
You must call [@use_model][great_ai.use_model] before [@GreatAI.create][great_ai.GreatAI.create]. Feel free to use [@use_model][great_ai.use_model] in other places of the codebase, it works equally well outside of GreatAI services.
|
||||
You must call [@use_model][great_ai.use_model] before [@GreatAI.create][great_ai.GreatAI.create]. Note that decorators are applied starting from the bottom-most one. Feel free to use [@use_model][great_ai.use_model] in other places of the codebase, and it works equally well outside GreatAI services.
|
||||
|
||||
### Using `@parameter`
|
||||
|
||||
|
|
@ -93,11 +93,11 @@ assert type_safe_greeter('Andras').output == 'Hi Andras'
|
|||
```
|
||||
|
||||
!!! important
|
||||
You must call [@parameter][great_ai.parameter] before [@GreatAI.create][great_ai.GreatAI.create]. Feel free to use [@parameter][great_ai.parameter] in other places of the codebase, it works equally well outside of GreatAI services.
|
||||
You must call [@parameter][great_ai.parameter] before [@GreatAI.create][great_ai.GreatAI.create]. Note that decorators are applied starting from the bottom-most one. Feel free to use [@parameter][great_ai.parameter] in other places of the codebase, and it works equally well outside GreatAI services.
|
||||
|
||||
## Complex example
|
||||
|
||||
Refer to the following example summarising the options you have when instantiating a GreatAI service.
|
||||
The following example summarises the options you have when instantiating a GreatAI service.
|
||||
|
||||
```python title="complex.py"
|
||||
from great_ai import save_model, GreatAI, parameter, use_model, log_metric
|
||||
|
|
@ -117,4 +117,4 @@ def add_number(positive_number: int, secret: int) -> int:
|
|||
assert add_number(1).output == 5
|
||||
```
|
||||
|
||||
1. Refer to [storing models](/how-to-guides/store-models) for specifying where to store your models.
|
||||
1. Refer to [the configuration page](/how-to-guides/configure-service) for specifying where to store your models.
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
# How to manage training data
|
||||
|
||||
In order to simplify your training data management, `great-ai` provide two complementing approaches for inputting new data-points.
|
||||
In order to simplify your training data management, `great-ai` provide two complementing approaches for inputting new data points.
|
||||
|
||||
## Upload data
|
||||
|
||||
At the start of your experiments' first iteration, after you've gathered suitable samples for training, you can call [great_ai.add_ground_truth][]. This automatically stores a timestamp and also allows you to assign tags to the data. Using these attributes, [great_ai.query_ground_truth][] can be called to get a filtered view of the training data.
|
||||
|
||||
!!! important "Train-test-validation splits"
|
||||
It is a best-practice to lock-away a test split of your data that is only used for the final quality assessment. This prevents you from accidentally training on it, or inadvertently tuning the model to have the highest accuracy metrics on the test split. This, of course, may lead to dubious results, hence, care must be taken to avoid it.
|
||||
It is a best practice to lock away the test split of your data that is only used for the final quality assessment. This prevents you from accidentally training on it or inadvertently tuning the model to have the highest accuracy metrics on the test split. This, of course, may lead to dubious results; hence, care must be taken to avoid it.
|
||||
|
||||
With [great_ai.add_ground_truth][], there is an option to tag the samples with `train`, `test`, and `validation` randomly, following a predefined distribution. This happens as soon as they're written in the database. Later on, these can be queried by providing the name of the appropriate tags.
|
||||
With [great_ai.add_ground_truth][], there is an option to tag the samples with `train`, `test`, and `validation` randomly, following a predefined distribution. This happens as soon as they're written in the database. Later, these can be queried by providing the name of the appropriate tags.
|
||||
|
||||
The nice thing about this is that the 'input-expected output' pairs are stored as traces. Thus, they behave exactly like regular prediction traces.
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ add_ground_truth(
|
|||
)
|
||||
```
|
||||
|
||||
1. Note that the ratios don't have to add up to 1. They are just weights. There is also a `validation_split_ratio` which is 0 by default.
|
||||
1. Note that the ratios don't have to add up to 1. They are just weights. There is also a `validation_split_ratio` which is 0 by default.
|
||||
|
||||
```python
|
||||
>>> from great_ai import query_ground_truth
|
||||
|
|
@ -50,13 +50,13 @@ add_ground_truth(
|
|||
'trace_id': 'abee0671-beb9-4284-8c3b-c65e5836ce38'})]
|
||||
```
|
||||
|
||||
1. Expected output. This can be also accessed through the `.output` property.
|
||||
1. Expected output. This can also be accessed through the `.output` property.
|
||||
2. The input value is stored here.
|
||||
3. Notice how `ground_truth` always included as a tag when using [great_ai.add_ground_truth][].
|
||||
3. Notice how `ground_truth` is always included as a tag when using [great_ai.add_ground_truth][].
|
||||
|
||||
## Get feedback
|
||||
|
||||
After the initial data gathering, end-to-end feedback can be also integrated into the dataset.
|
||||
After the initial data gathering, end-to-end feedback can also be integrated into the dataset.
|
||||
|
||||
The scaffolded REST API contains endpoints for managing traces and their feedbacks.
|
||||
|
||||
|
|
|
|||
|
|
@ -5,25 +5,49 @@ Provided you already have [Python3](https://www.python.org/downloads/){ target=_
|
|||
```sh
|
||||
pip install great-ai
|
||||
```
|
||||
> Python 3.8 or later is required.
|
||||
> Python 3.7 or later is required.
|
||||
|
||||
This will work on all major operating systems.
|
||||
|
||||
## Google Colab
|
||||
|
||||
In order to use GreatAI in [Google Colab](https://colab.research.google.com){ target=_blank }, you need to downgrade `pyyaml` to a Colab compatible version. [See related StackOverflow question](https://stackoverflow.com/questions/69564817/typeerror-load-missing-1-required-positional-argument-loader-in-google-col){ target=_blank }.
|
||||
|
||||
```sh
|
||||
pip install great-ai pyyaml==5.4.1
|
||||
```
|
||||
> This will make GreatAI work in Colab.
|
||||
|
||||
## Command-line tools
|
||||
|
||||
After installation, `great-ai` and `large-file` are available as commands. The former is required for deploying your application while the latter lets you manage models and datasets from your terminal.
|
||||
After installation, `great-ai` and `large-file` are available as commands. The former is required for deploying your application, while the latter lets you manage models and datasets from your terminal.
|
||||
|
||||
??? note "Snakes & kebabs"
|
||||
The library is called `great-ai`; therefore, its command-line entry point is also called `great-ai`. However, Python module names cannot contain hyphens, that's why you have to `import great_ai` with an underscore. The `great-ai` CLI tool is also available as `python3 -m great_ai`.
|
||||
|
||||
To help with the confusion, a CLI executable called `great_ai` (and `large_file`) are also installed. Thus, if you prefer, you can always refer to GreatAI using its underscored name variant (`great_ai`).
|
||||
|
||||
!!! warning "Windows"
|
||||
On Windows, you might encounter a similar ==warning== from `pip`:
|
||||
> WARNING: The scripts great-ai.exe, great_ai.exe, large-file.exe and large_file.exe are installed in 'C:\Users\...\Scripts' which is not on PATH.
|
||||
> Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
|
||||
On Windows, you might encounter a similar warning from `pip`:
|
||||
> `WARNING: The scripts great-ai.exe, great_ai.exe, large-file.exe and large_file.exe are installed in 'C:\Users\...\Scripts', which is not on PATH.`
|
||||
|
||||
> `Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.`
|
||||
|
||||
This means that `great-ai.exe` and `large-file.exe` are not in your `PATH`. Either add their containing directory ('C:\Users\...\Scripts' in this case) to your `PATH` or use `python3 -m great_ai` and `python3 -m great_ai.large_file` instead of the exe-s.
|
||||
|
||||
## Update
|
||||
|
||||
If you wish to update to the latest version execute:
|
||||
If you wish to update to the latest version, execute:
|
||||
|
||||
```sh
|
||||
pip install --upgrade great-ai
|
||||
```
|
||||
|
||||
## Bleeding edge
|
||||
|
||||
You can also install the latest (usually unreleased) version from GitHub.
|
||||
|
||||
```sh
|
||||
pip install --upgrade git+https://github.com/schmelczer/great-ai.git
|
||||
```
|
||||
> Python 3.7 or later is required.
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
# How to use LargeFile-s
|
||||
# How to use LargeFiles
|
||||
|
||||
The functions [save_model][great_ai.use_model] and [@use_model][great_ai.use_model] wrap LargeFile instances. Hence, besides configuring LargeFile, users have few reasons to use LargeFile-s directly.
|
||||
The functions [save_model][great_ai.use_model] and [@use_model][great_ai.use_model] wrap LargeFile instances. Hence, besides configuring [LargeFile](/reference/large-file), users have few reasons to use LargeFiles directly.
|
||||
|
||||
## Motivation
|
||||
|
||||
Oftentimes, especially when working with data-heavy applications, large files can proliferate in a repository. Version controlling them is an obvious next step, however, GitHub's git LFS implementation [doesn't support deleting](https://docs.github.com/en/repositories/working-with-files/managing-large-files/removing-files-from-git-large-file-storage#git-lfs-objects-in-your-repository) large files, making it easy for them to eat-up the LFS quota and explode the size of your repos.
|
||||
Often, especially when working with data-heavy applications, large files can proliferate in a repository. Version controlling them is an obvious next step. However, GitHub's git LFS implementation [doesn't support deleting](https://docs.github.com/en/repositories/working-with-files/managing-large-files/removing-files-from-git-large-file-storage#git-lfs-objects-in-your-repository) large files, making it easy for them to eat-up the LFS quota and explode the size of your repos.
|
||||
|
||||
[DVC](https://dvc.org/) is a viable alternative, however, it requires users to learn to use one more CLI tool.
|
||||
[DVC](https://dvc.org/) is a viable alternative; however, it requires users to learn to use one more CLI tool.
|
||||
|
||||
??? note "Using LargeFile-s directly (usually not needed)"
|
||||
LargeFile doesn't require users to learn too much new. It is a nearly exact copy of the built-in `open()` function of Python with which users are certainly already familiar.
|
||||
LargeFile doesn't require users to learn too much new. It is a nearly exact copy of Python's built-in `open()` function, with which users are undoubtedly already familiar.
|
||||
|
||||
## Simple example
|
||||
|
||||
|
|
@ -24,22 +24,22 @@ Oftentimes, especially when working with data-heavy applications, large files ca
|
|||
})
|
||||
|
||||
# Creates a new version and deletes the older version
|
||||
# leaving the 3 most recently used intact
|
||||
# leaving the three most recently used intact
|
||||
with LargeFileS3("test.txt", "w", keep_last_n=3) as f:
|
||||
for i in range(100000):
|
||||
f.write('test\n')
|
||||
|
||||
# By default the latest version is returned
|
||||
# The latest version is returned by default
|
||||
# but an optional `version` keyword argument can be provided as well
|
||||
with LargeFileS3("test.txt", "r") as f: #(1)
|
||||
print(f.readlines()[0])
|
||||
```
|
||||
|
||||
1. In this case, the latest version is already in the local cache, no download is required.
|
||||
1. The latest version is already in the local cache; no download is required.
|
||||
|
||||
### More details
|
||||
|
||||
`LargeFile` behaves like an opened file (in the background it is a temp file after all). Binary reads and writes are supported along with the [different keywords `open()` accepts](https://docs.python.org/3/library/functions.html#open).
|
||||
`LargeFile` behaves like an opened file (in the background, it is a temp file after all). Binary reads and writes are supported along with the [different keywords `open()` accepts](https://docs.python.org/3/library/functions.html#open){ target=_blank }.
|
||||
|
||||
The local cache can be configured with these properties:
|
||||
|
||||
|
|
@ -50,7 +50,7 @@ Oftentimes, especially when working with data-heavy applications, large files ca
|
|||
|
||||
#### I only need a path
|
||||
|
||||
In case you only need a path to the "remote" file, this pattern can be applied:
|
||||
In case you only need a path to the (proxy of the) remote file, this pattern can be applied:
|
||||
|
||||
```python
|
||||
path_to_model = LargeFileS3("folder-of-my-bert-model", version=31).get()
|
||||
|
|
@ -64,13 +64,13 @@ Oftentimes, especially when working with data-heavy applications, large files ca
|
|||
LargeFileS3("folder-of-my-bert-model").push('path_to_local/folder_or_file')
|
||||
```
|
||||
|
||||
> This way both regular files and folders can be handled. The uploaded file is called **folder-of-my-bert-model**, the local name is ignored.
|
||||
> This way, both regular files and folders can be handled. The uploaded file is called **folder-of-my-bert-model**, the local name is ignored.
|
||||
|
||||
Lastly, all version of the remote object can be deleted by calling `LargeFileS3("my-file").delete()`. It will still reside in your local cache afterwards, its deletion will happen next time your local cache has to be pruned.
|
||||
Lastly, all version of the remote object can be deleted by calling `LargeFileS3("my-file").delete()`. It will still reside in your local cache afterwards; its deletion will happen next time your local cache has to be pruned.
|
||||
|
||||
## From the command-line
|
||||
|
||||
The main reason for using the `large-file` or `python3 -m great_ai.large_file` commands is to upload or download models from the terminal. For example, when building a docker image, it is best-practice to cache the referred models.
|
||||
The main reason for using the `large-file` or `python3 -m great_ai.large_file` commands is to upload or download models from the terminal. For example, when building a docker image, it is best practice to cache the referred models.
|
||||
|
||||
### Setup
|
||||
|
||||
|
|
@ -90,14 +90,14 @@ large-file --backend s3 --secrets secrets.ini \
|
|||
--push my_first_file.json folder/my_second_file my_folder
|
||||
```
|
||||
|
||||
> Only the filename is used as the S3 name, the rest of the path is ignored.
|
||||
> Only the filename is used as the S3 name; the rest of the path is ignored.
|
||||
|
||||
!!! important "Using MongoDB"
|
||||
The possible values for `--backend` are `s3`, `mongo`, and `local`. The latter doesn't need credentials, it only versions and stores your files in a local folder. MongoDB on the other hand requires a `mongo_connection_string` and a `mongo_database` to be specified. For storing large files, it uses the GridFS specification.
|
||||
The possible values for `--backend` are `s3`, `mongo`, and `local`. The latter doesn't need credentials. It only versions and stores your files in a local folder. MongoDB, on the other hand, requires a `mongo_connection_string` and a `mongo_database` to be specified. For storing large files, it uses the [GridFS](https://www.mongodb.com/docs/manual/core/gridfs){ target=_blank } specification.
|
||||
|
||||
### Download some files to the local cache
|
||||
|
||||
This can be useful when building a Docker image for example. This way, the files can already reside inside the container and need not be downloaded later.
|
||||
This can be useful when building a Docker image, for example. This way, the files can already reside inside the container and need not be downloaded later.
|
||||
|
||||
```sh
|
||||
large-file --backend s3 --secrets ~/.aws/credentials \
|
||||
|
|
@ -9,7 +9,7 @@ from great_ai import GreatAI
|
|||
|
||||
@GreatAI.create
|
||||
def greeter(your_name: str) -> str:
|
||||
return f'Hi {your_name}'
|
||||
return f'Hi {your_name}!'
|
||||
```
|
||||
|
||||
## One-off prediction
|
||||
|
|
@ -24,7 +24,7 @@ Trace[str]({'created': '2022-07-11T14:31:46.183764',
|
|||
'logged_values': {'arg:your_name:length': 3, 'arg:your_name:value': 'Bob'},
|
||||
'models': [],
|
||||
'original_execution_time_ms': 0.0381,
|
||||
'output': 'Hi Bob',
|
||||
'output': 'Hi Bob!',
|
||||
'tags': ['greeter', 'online', 'development'],
|
||||
'trace_id': '7c284fd7-7f0d-4464-b5f8-3ef126df34af'})
|
||||
```
|
||||
|
|
@ -35,7 +35,7 @@ As you can see, the original return value is wrapped in a [Trace][great_ai.Trace
|
|||
|
||||
Likely, the main way you would like to expose your model is through an HTTP API. [@GreatAI.create][great_ai.GreatAI.create] scaffolds many REST API endpoints for your model and creates a [FastAPI](https://fastapi.tiangolo.com/){ target=_blank } app available under [GreatAI.app][great_ai.GreatAI]. This can be served using [uvicorn](https://www.uvicorn.org/){ target=_blank } or any other [ASGI server](https://asgi.readthedocs.io/en/latest/){ target=_blank }.
|
||||
|
||||
Since most ML code lives in [Jupyter](https://jupyter.org/){ target=_blank } notebooks, therefore, deploying a notebook containing the inference function is supported. To this end, `uvicorn` is wrapped by the `great-ai` command-line utility which, among others, takes care of feeding a notebook into `uvicorn`. It also supports auto-reloading.
|
||||
Since most ML code lives in [Jupyter](https://jupyter.org/){ target=_blank } notebooks, therefore, deploying a notebook containing the inference function is supported. To achieve this, `uvicorn` is wrapped by the `great-ai` command-line utility, which — among others — takes care of feeding a notebook into `uvicorn`. It also supports auto-reloading.
|
||||
|
||||
### In development
|
||||
|
||||
|
|
@ -67,7 +67,7 @@ ENVIRONMENT=production great-ai greeter.py
|
|||
```
|
||||
|
||||
Simply run `ENVIRONMENT=production great-ai deploy.ipynb` in the command-line of a production machine.
|
||||
> This is the crudest approach, however, it might be fitting for some contexts.
|
||||
> This is the crudest approach; however, it might be fitting for some contexts.
|
||||
|
||||
#### Containerised deployment
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ docker run -p 6060:6060 --volume `pwd`:/app --rm \
|
|||
|
||||
#### Use a Platform-as-a-Service
|
||||
|
||||
Similarly to the previous approach, your code will run in a container. However, instead of manually managing it, you can just choose from a plethora of PaaS providers (such as [AWS ECS](https://aws.amazon.com/ecs/){ target=_blank }, [DO App platform](https://www.digitalocean.com/products/app-platform){ target=_blank }, [MLEM](https://mlem.ai/){ target=_blank }) that take a Docker image as a source and handle the rest of the deployment.
|
||||
Similar to the previous approach, your code will run in a container. However, instead of manually managing it, you can just choose from a plethora of PaaS providers (such as [AWS ECS](https://aws.amazon.com/ecs/){ target=_blank }, [DO App platform](https://www.digitalocean.com/products/app-platform){ target=_blank }, [MLEM](https://mlem.ai/){ target=_blank }, [Streamlit](https://streamlit.io/){ target=_blank }) that take a Docker image as a source and handle the rest of the deployment.
|
||||
|
||||
To this end, you can also create a custom Docker image. It is especially useful if you have third-party dependencies, such as [PyTorch](https://pytorch.org/){ target=_blank } or [TensorFlow](https://www.tensorflow.org/){ target=_blank }.
|
||||
|
||||
|
|
@ -97,12 +97,11 @@ RUN pip install --no-cache-dir --requirement requirements.txt
|
|||
# have to download it each time a container starts
|
||||
RUN large-file --backend s3 --secrets s3.ini --cache my-domain-predictor
|
||||
|
||||
# Add you application code to the image
|
||||
# Add your application code to the image
|
||||
COPY . .
|
||||
|
||||
# The default ENTRYPOINT is great-ai, specify it's argument using CMD
|
||||
# The default ENTRYPOINT is great-ai; specify its argument using CMD
|
||||
CMD ["deploy.ipynb"]
|
||||
|
||||
```
|
||||
|
||||
## Batch prediction
|
||||
|
|
@ -117,7 +116,7 @@ Processing larger amounts of data on a single machine is made easy by the [Great
|
|||
'logged_values': {'arg:your_name:length': 5, 'arg:your_name:value': 'Alice'},
|
||||
'models': [],
|
||||
'original_execution_time_ms': 0.1251,
|
||||
'output': 'Hi Alice',
|
||||
'output': 'Hi Alice!',
|
||||
'tags': ['greeter', 'online', 'development'],
|
||||
'trace_id': '90ffa15f-e839-41c4-8e7a-3211168bc138'}),
|
||||
Trace[str]({'created': '2022-07-11T14:36:37.166659',
|
||||
|
|
@ -126,7 +125,7 @@ Processing larger amounts of data on a single machine is made easy by the [Great
|
|||
'logged_values': {'arg:your_name:length': 3, 'arg:your_name:value': 'Bob'},
|
||||
'models': [],
|
||||
'original_execution_time_ms': 0.0571,
|
||||
'output': 'Hi Bob',
|
||||
'output': 'Hi Bob!',
|
||||
'tags': ['greeter', 'online', 'development'],
|
||||
'trace_id': 'f48e94c7-0815-48b3-a864-41349d3dae84'})]
|
||||
```
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@
|
|||
|
||||
[](https://badge.fury.io/py/great-ai)
|
||||
[](https://pepy.tech/project/great-ai)
|
||||

|
||||
[](https://hub.docker.com/repository/docker/schmelczera/great-ai)
|
||||
[](https://github.com/schmelczer/great-ai/actions/workflows/test.yml)
|
||||
[](https://sonar.scoutinscience.com/dashboard?id=great-ai)
|
||||
[](https://sonar.scoutinscience.com/dashboard?id=great-ai)
|
||||
|
||||
Applying AI is becoming increasingly easier but many case studies have shown that these applications are often deployed poorly. This may lead to suboptimal performance and to introducing [unintended biases](https://en.wikipedia.org/wiki/Weapons_of_Math_Destruction){ target=_blank }. GreatAI helps fixing this by allowing you to ==easily transform your prototype AI code into production-ready software==.
|
||||
Applying AI is becoming increasingly easier, but many case studies have shown that these applications are often deployed poorly. This may lead to suboptimal performance and to introducing [unintended biases](https://en.wikipedia.org/wiki/Weapons_of_Math_Destruction){ target=_blank }. GreatAI helps fix this by allowing you to ==easily transform your prototype AI code into production-ready software==.
|
||||
|
||||
??? quote "Case studies"
|
||||
"There is a need to consider and adapt well established SE practices which have been ignored or had a very narrow focus in ML literature."
|
||||
|
|
@ -20,16 +20,17 @@ Applying AI is becoming increasingly easier but many case studies have shown tha
|
|||
|
||||
"Because a mature system might end up being (at most) 5% machine learning code and (at least) 95% glue code, it may be less costly to create a clean native solution rather than re-use a generic package." — [Sculley et al.](https://www.researchgate.net/profile/Todd-Phillips/publication/319769912_Hidden_Technical_Debt_in_Machine_Learning_Systems/links/61e716d68d338833e37a7fd6/Hidden-Technical-Debt-in-Machine-Learning-Systems.pdf){ target=_blank }
|
||||
|
||||
"For example, practice 25 is very important for “Traceability", yet relatively weakly adopted. We expect that the results from this type of analysis can, in the future, provide useful guidance for practitioners in terms of aiding them to assess their rate of adoption for each practice and to create roadmaps for improving their processes. — [Serban et al.](https://dl.acm.org/doi/abs/10.1145/3382494.3410681?casa_token=uCFz0dtDR6gAAAAA:4_8OMJ-5njwopYkB1KSGAu9JfbNq4nfa8LRE0fj84ckjfo-GgtcYQivZTGxal3M4haoA8r_xwpw){ target=_blank }
|
||||
"For example, practice 25 is very important for "Traceability", yet relatively weakly adopted. We expect that the results from this type of analysis can, in the future, provide useful guidance for practitioners in terms of aiding them to assess their rate of adoption for each practice and to create roadmaps for improving their processes. — [Serban et al.](https://dl.acm.org/doi/abs/10.1145/3382494.3410681?casa_token=uCFz0dtDR6gAAAAA:4_8OMJ-5njwopYkB1KSGAu9JfbNq4nfa8LRE0fj84ckjfo-GgtcYQivZTGxal3M4haoA8r_xwpw){ target=_blank }
|
||||
|
||||
## Features
|
||||
|
||||
- [x] Save prediction traces of each prediction including arguments and model versions
|
||||
- [x] Save prediction traces of each prediction, including arguments and model versions
|
||||
- [x] Save feedback and merge it into a ground-truth database
|
||||
- [x] Version and store models and data on shared infrastructure *(MongoDB GridFS, S3-compatible storage, shared local-volume)*
|
||||
- [x] Version and store models and data on shared infrastructure *(MongoDB GridFS, S3-compatible storage, shared volume)*
|
||||
- [x] Automatically scaffolded custom REST API (and OpenAPI schema) for easy integration
|
||||
- [x] Input validation
|
||||
- [x] Sensible cache-policy
|
||||
- [x] Graceful error handling
|
||||
- [x] Seamless support for both synchronous and asynchronous inference methods
|
||||
- [x] Easy integration with remote GreatAI instances
|
||||
- [x] Built-in parallelisation (with support for multiprocessing, async, and mixed modes) for batch processing
|
||||
|
|
@ -39,7 +40,8 @@ Applying AI is becoming increasingly easier but many case studies have shown tha
|
|||
- [x] Auto-reload for development
|
||||
- [x] Docker support for deployment
|
||||
- [x] Deployable Jupyter Notebooks
|
||||
- [x] Dashboard for high-level overview and analysing traces
|
||||
- [x] Dashboard for online monitoring and analysing traces
|
||||
- [x] Active support for Python 3.7, 3.8, 3.9, and 3.10
|
||||
|
||||
## Roadmap
|
||||
|
||||
|
|
@ -70,7 +72,7 @@ def greeter(name: str) -> str: #(2)
|
|||
2. [Typing functions](https://docs.python.org/3/library/typing.html){ target=_blank } is recommended in general, however, not required for GreatAI to work.
|
||||
|
||||
??? note
|
||||
In practice, `greeter` could be an inference function of some AI/ML application. But it could also just wrap a black-box solution of some SaaS. Either way, it is [imperative to have continuous oversight](https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai){ target=_blank } of the services you provide and data you process especially in the context of AI/ML applications.
|
||||
In practice, `greeter` could be an inference function of some AI/ML application. But it could also just wrap a black-box solution of some SaaS. Either way, it is [imperative to have continuous oversight](https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai){ target=_blank } of the services you provide and the data you process, especially in the context of AI/ML applications.
|
||||
|
||||
```sh title="terminal"
|
||||
great-ai demo.py
|
||||
|
|
@ -80,13 +82,13 @@ great-ai demo.py
|
|||
{ loading=lazy }
|
||||
|
||||
!!! success
|
||||
Your GreatAI service is ready for production use. Many of the [SE4ML best-practices](https://se-ml.github.io){ target=_blank } are configured and implemented automatically. To have full control over your service and to understand what else you might need to do in your use case, continue reading this documentation.
|
||||
Your GreatAI service is ready for production use. Many of the [SE4ML best practices](https://se-ml.github.io){ target=_blank } are configured and implemented automatically. To have full control over your service and to understand what else you might need to do in your use case, continue reading this documentation.
|
||||
|
||||
## Why is this GREAT?
|
||||
|
||||

|
||||
|
||||
GreatAI fits between the prototype and deployment phases of your (or your organisation's) AI development lifecycle. This is highlighted with blue in the diagram. Here, a number of best practices can be automatically implemented aiming to achieve the following attributes:
|
||||
GreatAI fits between the prototype and deployment phases of your (or your organisation's) AI development lifecycle. This is highlighted in blue in the diagram. Here, several best practices can be automatically implemented, aiming to achieve the following attributes:
|
||||
|
||||
- **G**eneral: use any Python library without restriction
|
||||
- **R**obust: have error-handling and well-tested utilities out-of-the-box
|
||||
|
|
@ -96,9 +98,9 @@ GreatAI fits between the prototype and deployment phases of your (or your organi
|
|||
|
||||
## Why GreatAI?
|
||||
|
||||
There are other, existing solutions aiming to facilitate this phase. [Amazon SageMaker](https://aws.amazon.com/sagemaker){ target=_blank } and [Seldon Core](https://www.seldon.io/solutions/open-source-projects/core){ target=_blank } provide the most comprehensive suite of features. If you have the opportunity to use them, do that because they're great.
|
||||
There are other existing solutions aiming to facilitate this phase. [Amazon SageMaker](https://aws.amazon.com/sagemaker){ target=_blank } and [Seldon Core](https://www.seldon.io/solutions/open-source-projects/core){ target=_blank } provide the most comprehensive suite of features. If you have the opportunity to use them, do that because they're great.
|
||||
|
||||
However, research indicates that professionals rarely use them. This may be due to their inherent setup and operating complexity. ==GreatAI is designed to be as simple to use as possible.== Its clear, high-level API and sensible default configuration makes it extremely easy to start using. Despite its relative simplicity over Seldon Core, it still implements many of the [SE4ML best-practices](https://se-ml.github.io){ target=_blank }, and thus, can meaningfully improve your deployment without requiring prohibitively large effort.
|
||||
However, research indicates that professionals rarely use them. This may be due to their inherent setup and operational complexity. ==GreatAI is designed to be as simple to use as possible.== Its straightforward, high-level API and sensible default configuration make it extremely easy to start using. Despite its relative simplicity over Seldon Core, it still implements many of the [SE4ML best practices](https://se-ml.github.io){ target=_blank }, and thus, can meaningfully improve your deployment without requiring prohibitively great effort.
|
||||
|
||||
|
||||
<div style="display: flex; justify-content: space-evenly; flex-wrap: wrap;" markdown>
|
||||
|
|
|
|||
BIN
docs/media/annotator.png
Normal file
|
After Width: | Height: | Size: 920 KiB |
927
docs/media/architecture.drawio.svg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
docs/media/design-cycle.drawio.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 154 KiB |
BIN
docs/media/scibert-confusion.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
|
|
@ -187,7 +187,7 @@
|
|||
<div data-drawio-colors="color: #ffffff; " style="box-sizing: border-box; font-size: 0px; text-align: center;">
|
||||
<div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(255, 255, 255); line-height: 1.2; pointer-events: none; white-space: normal; overflow-wrap: normal;">
|
||||
<font style="font-size: 14px">
|
||||
Artifact combining the model with deplyoment best-practices
|
||||
Artifact combining the model with deplyoment best practices
|
||||
</font>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 73 KiB |
|
|
@ -4,6 +4,8 @@
|
|||
from great_ai.large_file import *
|
||||
```
|
||||
|
||||
For more details about using LargeFiles, check out the [how to guide](/how-to-guides/large-file/).
|
||||
|
||||
::: great_ai.large_file.LargeFileLocal
|
||||
options:
|
||||
show_root_heading: true
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@ Multiprocessing and multithreading-based parallelism with support for `async` fu
|
|||
|
||||
Because both [threaded_parallel_map][great_ai.utilities.parallel_map.threaded_parallel_map.threaded_parallel_map] and [parallel_map][great_ai.utilities.parallel_map.parallel_map.parallel_map] have a streaming interface, it is easy to compose them and end up with, for example, a process for each CPU core with its own thread-pool or event-loop. Longer pipelines are also easy to imagine. The chunking methods help in these compositions.
|
||||
|
||||
For more info, check-out [the scraping guide](/how-to-guides/scraping).
|
||||
|
||||
::: great_ai.utilities.chunk
|
||||
::: great_ai.utilities.unchunk
|
||||
|
||||
|
|
|
|||
11
docs/surveys/Best practices assessment.csv
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"How many years of software engineering experience do you have?","How many years of data science experience do you have?","Write reusable scripts for data cleaning and merging","Make datasets available on shared infrastructure","Use versioning for data, model, configurations and training scripts","Continuously monitor the behaviour of deployed models","Log production predictions with the model’s version and input data","Store models in a single format for ease of use","Equip with web interface, package image, provide REST API","Provide simple API for serving batch and real-time requests","Integration with existing data infrastructure","Querying, visualising and understanding metrics and event logging","Allow experimentation with the inference code","Keep the model’s API and documentation together","Parallelise feature extraction","Cache predictions","Async support for top-down chaining models"
|
||||
"3","1","Strongly agree","Agree","Strongly agree","Neither agree nor disagree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Strongly agree","Neither agree nor disagree","Strongly agree"
|
||||
"6","2","Neither agree nor disagree","Agree","Neither agree nor disagree","Agree","Agree","Neither agree nor disagree","Disagree","Strongly disagree","Disagree","Strongly disagree","Disagree","Strongly disagree","Disagree","Strongly agree","Strongly disagree"
|
||||
"1","5","Strongly disagree","Disagree","Disagree","Strongly disagree","Disagree","Strongly disagree","Strongly disagree","Neither agree nor disagree","Strongly disagree","Disagree","Neither agree nor disagree","Agree","Strongly disagree","Strongly disagree","Disagree"
|
||||
"3","3","Agree","Agree","Disagree","Neither agree nor disagree","Agree","Not applicable","Not applicable","Neither agree nor disagree","Agree","Disagree","Agree","Strongly agree","Not applicable","Neither agree nor disagree","Agree"
|
||||
"1","7","Neither agree nor disagree","Disagree","Neither agree nor disagree","Disagree","Strongly disagree","Not applicable","Not applicable","Disagree","Strongly disagree","Disagree","Disagree","Neither agree nor disagree","Strongly disagree","Strongly agree","Not applicable"
|
||||
"6","0","Strongly agree","Strongly agree","Agree","Neither agree nor disagree","Agree","Strongly agree","Agree","Strongly agree","Agree","Strongly agree","Disagree","Strongly agree","Agree","Strongly agree","Not applicable"
|
||||
"2","2","Disagree","Neither agree nor disagree","Agree","Strongly agree","Neither agree nor disagree","Disagree","Strongly agree","Disagree","Disagree","Agree","Neither agree nor disagree","Neither agree nor disagree","Not applicable","Disagree","Strongly agree"
|
||||
"1","2","Disagree","Neither agree nor disagree","Disagree","Agree","Disagree","Strongly disagree","Strongly agree","Strongly agree","Strongly disagree","Disagree","Agree","Strongly disagree","Not applicable","Strongly disagree","Strongly disagree"
|
||||
"0","1","Strongly disagree","Disagree","Strongly disagree","Disagree","Strongly disagree","Disagree","Agree","Strongly disagree","Disagree","Strongly disagree","Disagree","Strongly disagree","Disagree","Disagree","Strongly disagree"
|
||||
"7","1","Strongly agree","Strongly agree","Agree","Strongly agree","Agree","Agree","Strongly agree","Strongly disagree","Strongly agree","Not applicable","Agree","Agree","Strongly agree","Strongly agree","Agree"
|
||||
|
11
docs/surveys/Technology acceptance model questionnaire.csv
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"I believe the use of GreatAI improves the quality of AI deployments.","I believe the use of GreatAI would increase my productivity.","I believe the use of GreatAI can lead to robust and trustworthy deployments.","Overall, I found GreatAI useful when working with AI.","I found the GreatAI easy to learn.","I found it is easy to employ GreatAI in practice.","I found it is easy to integrate GreatAI into an existing project.","Overall, I found GreatAI easy to use.","Assuming GreatAI is applicable to my task, I predict that I will use it on a regular basis in the future.","Overall, I intend to use the GreatAI in my personal or professional projects."
|
||||
"7","7","7","7","7","7","7","7","7","7"
|
||||
"7","7","6","7","5","6","7","6","7","7"
|
||||
"4","4","5","6","6","5","4","4","5","4"
|
||||
"6","7","6","7","7","6","7","6","7","6"
|
||||
"7","7","6","7","4","5","5","5","6","6"
|
||||
"6","6","6","6","6","6","6","6","6","6"
|
||||
"6","6","6","4","5","7","6","6","7","7"
|
||||
"7","6","6","6","4","5","3","5","5","6"
|
||||
"4","5","5","5","7","2","3","3","3","3"
|
||||
"7","7","7","7","5","6","5","6","7","7"
|
||||
|
BIN
docs/surveys/best-practices.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
1297
docs/surveys/surveys.ipynb
Normal file
|
|
@ -1,16 +1,18 @@
|
|||
\begin{abstract}
|
||||
|
||||
\absdiv{Background}
|
||||
Despite its long-standing history, artificial intelligence (AI) has only recently started enjoying widespread industry awareness and adoption; partly thanks to the prevalence of accessible frameworks exposing state-of-the-art models through simple API-s. In order to achieve robust production deployments, the successful integration of AI components demands strong engineering methods. Concerningly, a tendency seems to be unfolding: even though industry professionals already have access to frameworks for deploying AI correctly and responsibly, case-studies and developer surveys have found that a large fraction of deployments do not follow best practices.
|
||||
\absdiv{Objective}
|
||||
This thesis sets out to investigate the reasons behind the asymmetry between the adoption of accessible AI libraries and existing reusable solutions to robust deployments. A software framework called \textit{GreatAI} is designed which aims to facilitate \underline{G}eneral \underline{R}obust \underline{E}nd-to-end \underline{A}utomated \underline{T}rustworthy AI deployments while attempting to overcome the practical drawbacks of its predecessors.
|
||||
\absdiv{Method}
|
||||
The utility of \textit{GreatAI} is validated using the principles of design science methodology through iteratively designing its API and implementation along with the text mining pipeline of a commercial product. Subsequently, interviews are conducted with practitioners for validating the generalisability of the design.
|
||||
\absdiv{Results}
|
||||
To do.
|
||||
\absdiv{Conclusions}
|
||||
To do.
|
||||
Despite its long-standing history, artificial intelligence (AI) has only recently started enjoying widespread industry awareness and adoption, partly thanks to the prevalence of libraries that accessibly expose state-of-the-art models. However, the transition from prototypes to production-ready AI applications is still a source of struggle across the industry. Even though professionals already have access to frameworks for deploying AI, case studies and developer surveys have found that many deployments do not follow best practices.
|
||||
|
||||
\keywords{SE4ML \and AI engineering \and Trustworthy AI \and Deployment \and Text mining}
|
||||
\absdiv{Objective}
|
||||
This thesis investigates the causes of and presents a possible solution to the asymmetry between the adoption of libraries for \textit{applying} and those for \textit{deploying} AI. The potential solution is validated through designing a software framework called \textit{GreatAI}, which aims to facilitate \underline{G}eneral \underline{R}obust \underline{E}nd-to-end \underline{A}utomated \underline{T}rustworthy deployments while attempting to overcome the practical drawbacks of earlier similar tools, e.g., \textit{Seldon Core}, \textit{AWS SageMaker}, and \textit{TensorFlow Extended}.
|
||||
|
||||
\absdiv{Methods}
|
||||
\textit{GreatAI} serves as a proxy for exploring the proposed design decisions; moreover, its initial focus is limited to the domain of natural language processing (NLP). Its design is created by applying the principles of design science methodology through iteratively shaping it in two case studies of a commercial NLP pipeline. Subsequently, interviews are conducted with ten practitioners to assess its applicability and generalisability.
|
||||
|
||||
\absdiv{Results}
|
||||
\textit{GreatAI} helps implement 33 best practices through an accessible interface. These target the transition between the prototype and production phases of the AI development lifecycle. Feedback from professional data scientists and software engineers showed that ease of use and functionality are equally important in deciding to adopt deployment technologies, and the proposed framework was rated positively in both dimensions.
|
||||
|
||||
\absdiv{Conclusions}
|
||||
Increasing the overall maturity of industrial AI deployments by devising APIs with ease of adoption in mind is proved to be feasible. While \textit{GreatAI} mainly focuses on NLP, the results show that the development and deployment of trustworthy AI services, in general, can be assisted by frameworks prioritising easy adoption while still streamlining the implementation of various best practices.
|
||||
|
||||
\end{abstract}
|
||||
|
|
|
|||
|
|
@ -1,56 +1,34 @@
|
|||
\chapter{Introduction}
|
||||
|
||||
Artificial intelligence (AI) techniques have recently started enjoying widespread industry awareness and adoption; the use of AI is increasingly prevalent in all sectors \cite{wirtz2019artificial,bosch2021engineering}. The reasons behind this are manifold \cite{jordan2015machine}, to name a few: recent breakthroughs in deep-learning, increased public awareness, abundance of available data, access to powerful low-cost commodity hardware, education, but most interestingly, the rise of high-level libraries making ready-to-use state-of-the-art (SOTA) models easily available. The latter practically abolishes the barrier of entry for applying AI --- and with that --- can help use-cases in many areas.
|
||||
Artificial intelligence (AI) techniques have recently started enjoying widespread industry awareness and adoption; the use of AI is increasingly prevalent in all sectors \cite{wirtz2019artificial,bosch2021engineering}. The reasons behind this are manifold \cite{jordan2015machine}, to name a few: recent breakthroughs in deep learning (DL), increased public awareness, an abundance of available data, access to powerful low-cost commodity hardware, education, but most interestingly, the rise of high-level libraries making ready-to-use state-of-the-art (SOTA) models easily available. The latter radically lowers the barrier of entry for applying AI --- and with that --- can help use cases in various areas.
|
||||
|
||||
However, the successful integration of AI components into production-ready applications demands strong engineering methods in order to achieve robust deployments \cite{serban2020adoption}. That is why it is as important as ever to also focus on the quality and robustness of deployed models and software. For instance, the lack of a proper overview of the data transformation steps may lead to suboptimal performance and to introducing unintended biases which may contribute to the ever-increasing negative externality of misused AI \cite{o2016weapons}.
|
||||
However, to achieve robust deployments, the successful integration of AI components into production-ready applications demands strong engineering methods \cite{serban2020adoption}. That is why it is as essential as ever to also focus on the quality of deployed models and software. For instance, the lack of a proper overview of data transformation steps may lead to suboptimal performance and to introducing unintended biases, which might contribute to the ever-increasing negative externality of misused AI \cite{o2016weapons}.
|
||||
|
||||
Concerningly, a peculiar tendency seems to be unfolding: even though industry professionals already have access to numerous frameworks for deploying AI correctly and responsibly, case-studies and developer surveys have found that a considerable fraction of deployments do not follow best practices \cite{serban2020adoption,haakman2021ai,amershi2019software,de2019understanding,sculley2015hidden}. Utilising state-of-the-art machine-learning (ML) models has become reasonably simple; applying them properly is as difficult and nuanced as ever.
|
||||
Concerningly, a peculiar tendency seems to be unfolding: even though industry professionals already have access to numerous frameworks for deploying AI correctly and responsibly, case studies and developer surveys have found that a considerable fraction of deployments does not follow best practices \cite{serban2020adoption,haakman2021ai,amershi2019software,de2019understanding,sculley2015hidden}. Utilising state-of-the-art machine learning (ML) models has become reasonably simple; applying them correctly is as intricate and nuanced as ever.
|
||||
|
||||
This thesis sets out to investigate the reasons behind the apparent asymmetry between the adoption of accessible AI libraries and existing reusable solutions for robust AI deployments. It is hypothesised that the primary reason for the underwhelming adoption rate of best practices is the short supply or professionals equally proficient in the domains of both data science and software engineering. Nevertheless, even without their presence, practitioners could rely on frameworks for automated mature deployment processes. However, the barrier of entry for using such existing libraries is too high, especially when compared with the complexity of AI-libraries.
|
||||
This thesis sets out to investigate the reasons behind the apparent asymmetry between industry adoption of accessible AI-libraries and existing reusable solutions for robust AI deployments. It is hypothesised that the primary reason for the underwhelming adoption rate of best practices is the short supply of professionals equally proficient in the domains of both data science and software engineering. Nevertheless, even without their presence, practitioners could rely on frameworks to achieve some level of automation and maturity in their deployment processes. However, the barrier of entry for using such existing libraries is too high, especially when compared with the simplicity of AI-libraries.
|
||||
|
||||
Therefore, a software framework --- called \textit{GreatAI} --- is designed and its design is presented in this thesis. The principal motivation behind the construction of \textit{GreatAI} is to facilitate the responsible and robust deployment of algorithms and models by designing an accessible API in an attempt to overcome the practical drawbacks of other, similar frameworks. Its name stands for its main aim: to assist easily creating \underline{G}eneral \underline{R}obust \underline{E}nd-to-end \underline{A}utomated, and \underline{T}rustworthy AI deployments.
|
||||
Therefore, we design a software framework called \href{https://github.com/schmelczer/great-ai}{\textit{GreatAI}} and present it in this thesis. The principal motivation behind the construction of \textit{GreatAI} is to facilitate the responsible and robust deployment of algorithms and models by designing a more accessible API in an attempt to overcome the practical drawbacks of other similar frameworks. Its name stands for its main aim: to assist easily creating \underline{G}eneral \underline{R}obust \underline{E}nd-to-end \underline{A}utomated, and \underline{T}rustworthy AI deployments.
|
||||
|
||||
The utility of \textit{GreatAI} is validated using the principles of design science methodology \cite{wieringa2014design} through iteratively designing its API and implementation along with the text mining pipeline for a commercial product in collaboration with ScoutinScience B.V. The goal of the aforementioned software suite is to evaluate technical transfer opportunities in scientific publications. Subsequently, interviews are conducted with practitioners for validating the generalisability of the design.
|
||||
The utility of \textit{GreatAI} is examined and refined using the principles of design science methodology \cite{wieringa2014design} through iteratively designing its API and implementation in two case studies concerning the natural language processing (NLP) pipeline of a commercial product in collaboration with \href{https://scoutinscience.com/}{ScoutinScience B.V.} The goal of the aforementioned software suite is to evaluate technology-transfer opportunities in scientific publications. Subsequently, interviews are conducted with practitioners to validate the broader applicability and generalisability of the design.
|
||||
|
||||
The choice of case study subject is no coincidence; while working on the ScoutinScience Platform for the last two years, my colleagues and I have increasingly noticed the same recurring challenges in deploying and operating AI/ML pipelines. This has motivated me to pursue a general solution. Considering that the company's predominant field is NLP, the case studies, and hence, the prototype of \textit{GreatAI} will also focus primarily on deploying NLP models. Nonetheless, the motivation for creating a general solution for all AI/ML contexts remains and will be taken into account every step of the way.
|
||||
|
||||
\section{Research questions}
|
||||
|
||||
I hypothesise that facilitating the adoption of AI deployment best practices is viable by finding less complex framework designs which are easier to adopt in order to decrease the negative externality of misused AI. This paper is set out to investigate this hypothesis by answering the following research questions.
|
||||
We hypothesise that facilitating the adoption of AI deployment best practices is viable by finding less complex framework\footnote{The terms \textit{framework} and \textit{library} will be used interchangeably in this work stemming from their vague and often holistic differentiation.} designs that are easier to adopt in order to decrease the negative externality of misused AI. This paper investigates the hypothesis by answering the following research questions.
|
||||
|
||||
\begin{rqlist}
|
||||
\item Does the complexity of AI deployment frameworks hinder industrial projects?
|
||||
\item What is an effective way of decreasing the complexity of existing frameworks?
|
||||
\item Does \textit{GreatAI}'s design improve the efficiency of working with AI while also introducing best practices?
|
||||
\item Can the design of \textit{GreatAI} decrease the barrier of entry for applying best practices in other contexts?
|
||||
\item To what extent does the complexity of deploying AI hinder industrial applications?
|
||||
\item What API design techniques can be effectively applied in order to decrease the complexity of correctly deploying AI services?
|
||||
\item To what extent can \textit{GreatAI} automatically implement AI deployment best practices?
|
||||
\item How suitable is the design of \textit{GreatAI} for helping to apply best practices in other contexts?
|
||||
\end{rqlist}
|
||||
|
||||
In this case, complexity is used to refer to the difficulty faced by professionals (data scientists and software engineers alike) when integrating libraries with their solutions. This could also be described as the barrier of entry or steepness of the learning curve. If the aforementioned hypothesis is correct, the adoption of best practices can be efficiently increased by decreasing this complexity.
|
||||
In this case, complexity refers to the difficulty faced by professionals (Data Scientists and Software Engineers alike) when integrating third-party libraries with their solutions. This could also be described as the barrier of entry or steepness of the learning curve. If the aforementioned hypothesis is correct, the adoption of best practices can be efficiently increased by decreasing this complexity. AI deployment best practices entail the technical steps that ought to be taken to achieve robust, end-to-end, automated, and trustworthy deployments. These are detailed in Section \ref{section:requirements}.
|
||||
|
||||
AI deployment best practices entail the technical steps that ought to be taken in order to achieve robust, end-to-end, automated, and trustworthy deployments. These are detailed in Section \ref{section:requirements}.
|
||||
|
||||
The existence question regarding the problem itself (\textbf{RQ1}) is answered by reviewing the literature of the more than 30 published case-studies. \textbf{RQ2} and \textbf{RQ3} are closely connected, the design and evaluation phases utilised to answer them follow an iterative process. They are examined in Chapter \ref{chapter:design} and Chapter \ref{chapter:case} respectively. The final evaluation step is to ascertain the capability of the framework design to generalise beyond a single subdomain and problem context. This question, \textbf{RQ4}, is investigated through interviews with industry professionals in Chapter \ref{chapter:interviews}.
|
||||
|
||||
\section{Requirements} \label{section:requirements}
|
||||
|
||||
The best practices (which will be referenced throughout the thesis) with which the \textit{GreatAI} design is concerned are a subset of those compiled by Serban et al. \cite{serban2020adoption}. The core requirements --- sets of covered best practices --- for a software solution that has the potential of improving our problem context are presented in the following along with some explanation and clarification of each of them.
|
||||
|
||||
\paragraph{General} Albeit not explicitly in the list of best practices, compatibility is vital in encouraging adoption. Large projects oftentimes end up depending on numerous packages, each of which may impose some restrictions on the code: since these all have to be satisfied simultaneously, this can result in severe constraints on the application.
|
||||
|
||||
The open-source scene of data-related libraries is vibrant. To take the example of data validation, there are at least 4 popular choices which offer varying but similar features: \href{https://github.com/SeldonIO/alibi-detect}{Alibi detect}, \href{https://github.com/PAIR-code/facets}{Facets}, \href{https://github.com/great-expectations/great_expectations}{Great Expectations}, and Data Linter \cite{hynes2017data}. The responsibility of choosing the most fitting solution falls on the user, thus, they should not be limited in this by \textit{GreatAI}.
|
||||
|
||||
The programming language (PL) of the library should be its only non-general property. Fortunately, the de facto PL for data science is Python, hence, implementing the library in it should not significantly limit its applicability.
|
||||
|
||||
\paragraph{Robustness} in software development can be achieved by preparing the application to gracefully handle errors, even unexpected ones \cite{bishop1998robust}. Errors can and will happen in practice: storing and investigating what has led to them is required to prevent future ones. In the case of ML, errors might not be as obvious to detect as in more traditional applications (see the above mentioned data validators). Even if a single feature's value falls outside the expected distribution, unexpected results can happen. In cases where this might lead to real-world repercussions, extra care has to be taken to construct as many safe-guards as feasible. \textit{GreatAI} should support its clients in doing so.
|
||||
|
||||
\paragraph{End-to-end} In this case, it refers to end-to-end feedback. That is, feedback should be gathered on the real-world performance of the system, and this should be taken into account when designing/training the next iteration of the model. Static datasets may fail to capture the changing nature of real-life and can become outdated if they are not revised continuously. A well packaged deployment should make it trivial to integrate new training data.
|
||||
|
||||
\paragraph{Automated} The available time of data scientists and software engineers is limited and expensive. For this reason, humans should only be involved when their involvement is necessary. Steps in the development process that can be automated without negative consequences must be automated in order to achieve efficient development processes and let the experts focus on the issues that require their attention the most.
|
||||
|
||||
\paragraph{Trustworthy} As detailed by the \textit{Ethics guidelines for trustworthy AI}\footnote{\href{https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}{digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}}, human oversight, transparency, and accountability are some of the key requirements for trustworthy AI applications. For increasing public acceptance and trust while minimising negative societal impact, trustworthiness is essential.
|
||||
|
||||
These requirements were chosen stemming from their general importance and potential to be mostly handled (implemented) by a software framework\footnote{The terms \textit{framework} and \textit{library} are used interchangeably in this work stemming from their vague and often holistic differentiation.}. That is why, these provide an ideal initial direction for tackling the issue. Of course, these do not cover all best practices, for instance, the ones relating to organisational processes fall outside the realm of software engineering.
|
||||
|
||||
\newpage
|
||||
The existence question regarding the problem itself (\textbf{RQ1}) is answered by reviewing the literature of more than 30 published case studies in Chapter \ref{chapter:background}. \textbf{RQ2} and \textbf{RQ3} are closely connected: the design and evaluation phases utilised to answer them follow an iterative process. They are examined in Chapters \ref{chapter:design} and \ref{chapter:case} respectively. The final evaluation step is to ascertain the capability of the framework's design to generalise beyond a single subdomain and problem context. This question, \textbf{RQ4}, is investigated through interviews with industry professionals in Chapter \ref{chapter:interviews}.
|
||||
|
||||
\section{Structure}
|
||||
|
||||
The rest of the thesis is organised as follows: Chapter \ref{chapter:background} approaches the problem and the state-of-the-art from three perspectives: the trends of AI library API design, the experiences gained from practical applications, and a comparison of existing deployment options. Next, the methodology utilised for the subsequent chapters is described in Chapter \ref{chapter:methods}. The design cycle is broken into two chapters, Chapter \ref{chapter:design} and \ref{chapter:case}. The former clarifies the scope and describes the design principles, while the latter details the specifics of the practical use-case and the framework's interaction with it, and technological contributions of the novel design. The results are further validated by conducting interviews with industry professionals in Chapter \ref{chapter:interviews}. The thesis is concluded in Chapter \ref{chapter:conclusion}.
|
||||
The rest of the thesis is organised as follows: Chapter \ref{chapter:background} approaches the problem and the state-of-the-art from three perspectives: the recent trends of AI-library API designs, the experiences gained from practical applications, and a comparison of existing deployment options. Next, the methodology utilised for the subsequent chapters is described in Chapter \ref{chapter:methods}. The design cycle is broken into two chapters, Chapter \ref{chapter:design} and \ref{chapter:case}. The former clarifies the scope and describes the design principles, while the latter details the specifics of the practical case studies and the framework's interaction with them. The contributions of the novel design and obtained results are shown and further validated by conducting interviews with industry professionals in Chapter \ref{chapter:interviews}. The thesis is concluded in Chapter \ref{chapter:conclusion}.
|
||||
|
|
|
|||
|
|
@ -1,48 +1,38 @@
|
|||
\chapter{Background} \label{chapter:background}
|
||||
|
||||
Despite the long-standing history of artificial intelligence (AI), industry awareness and adoption has only recently started to meaningfully catch up \cite{wirtz2019artificial}. At the same time, more regulations and guidelines are being published, for instance, the Ethics guidelines for trustworthy AI by the European Commission's High-Level Expert Group on AI\footnote{\href{https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}{digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}}. This contains seven key requirements, including human agency and oversight, technical robustness, safety, transparency, and accountability. When it comes to accountability, there are meaningful advances being made \cite{raji2020closing}, however, in the case of the other requirements, the situation is more nuanced. Thankfully, the domain of software engineering for machine learning (SE4ML)\footnote{Both in practice and in the literature, this is sometimes also referred to as \textit{AI engineering} and has a large intersection with --- or arguably is the same as --- \textit{MLOps}.} has been working towards finding ways to assist data scientists in ensuring these (and more) expectations are met by their software.
|
||||
Despite the long-standing history of artificial intelligence, industry awareness and adoption have only recently started to catch up meaningfully \cite{wirtz2019artificial}. At the same time, more regulations and guidelines are being published, for instance, the Ethics guidelines for trustworthy AI by the European Commission's High-Level Expert Group on AI\footnote{\href{https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}{digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}}. This contains seven key requirements, including human agency and oversight, technical robustness, safety, transparency, and accountability. When it comes to accountability, clear advances are being made \cite{raji2020closing}; however, in the case of the other requirements, the situation is more nuanced. Thankfully, the field of software engineering for machine learning (SE4ML)\footnote{Both in practice and literature, this is sometimes also referred to as \textit{AI Engineering} and has a large intersection with, or arguably is the same as, \textit{MLOps}.} has been working towards finding ways to assist data scientists and software engineers in ensuring these (and more) expectations are met by their software.
|
||||
|
||||
In the following, the context of the problem is presented from three perspectives. Starting with its possible cause: the democratisation of state-of-the-art AI algorithms and models. Subsequently, the challenges encountered when applying AI in practice is outlined by case studies and survey data. Lastly, the existing approaches and solutions are introduced.
|
||||
In the following, the context of the problem is presented from three perspectives. Starting with its possible cause: the democratisation of state-of-the-art AI/ML\footnote{The terms AI and ML are often not differentiated and are used as synonyms in practice, for instance, see this study by the FDA \cite{food2019proposed}. ML is a well-defined subdomain of AI. However, most modern AI applications are also ML applications \cite{russell2010artificial}, hence, conflating the two terms may be slightly imprecise but usually not wrong.} architectures and models. Subsequently, the challenges encountered when applying AI in practice are outlined by case studies and survey data. Lastly, the existing approaches and solutions are introduced.
|
||||
|
||||
\section{Accessible AI} \label{section:accessible-ai}
|
||||
|
||||
Most companies prefer not to develop new models but instead reuse prior ones \cite{bosch2021engineering} and they are able to do so increasingly easier. In recent years, there has been a proliferation of highly accessible AI libraries. For example, let us consider the domain of natural language processing (NLP). There are various options for finding AI solutions that work out of the box: FLAIR \cite{akbik2019flair} and Huggingface's transformers \cite{wolf2019huggingface} let developers access the state-of-the-art models and methods in only a couple of lines of code (in many cases 2 or 3). With the advent of fine-tuneable models such as BERT \cite{devlin2018bert} and its many improved variations, Huggingface enables developers to leverage vast amounts of knowledge learned by any particular model and fine-tune it for their specific use case. The API for this is also extremely accessible.
|
||||
Most companies prefer not to develop new models but instead reuse prior ones \cite{bosch2021engineering}, and they are able to do so increasingly easily. In recent years, there has been a proliferation of highly accessible AI-libraries, many of which provide reusable models. For example, let us consider the domain of natural language processing. There are various options for finding AI solutions that work out of the box: FLAIR \cite{akbik2019flair} and Hugging Face's transformers \cite{wolf2019huggingface} let developers access state-of-the-art models and methods in only a couple of lines of code (in many cases 2 or 3). Using transfer-learning, Hugging Face enables its users to leverage vast amounts of knowledge learned by pretrained models (such as BERT \cite{devlin2018bert} and its many improved variations) and fine-tune them for their specific use case. The API exposing this is also extremely accessible.
|
||||
|
||||
It is not just these two packages, the list of readily available tools for language processing is vast: SpaCy \cite{srinivasa2018natural}, Gensim \cite{vrehuuvrek2011gensim}, and scikit-learn \cite{pedregosa2011scikit} are other great examples. The situation is similar in all subdomains of artificial intelligence: some domain expertise is --- admittedly --- beneficial but not a hard-requirement. This, combined with the exponentially increasing computing power affordably available to consumers and business alike \cite{sun2019summarizing}, results in AI that is accessible by many.
|
||||
It is not just these two libraries, the list of readily available solutions is vast: SpaCy \cite{srinivasa2018natural}, Gensim \cite{vrehuuvrek2011gensim}, scikit-learn \cite{pedregosa2011scikit}, and XGBoost \cite{Chen_2016} are other great examples. The situation is similar in all subdomains of artificial intelligence: some domain expertise is --- admittedly --- beneficial but not a hard-requirement. This, combined with the exponentially increasing computing power affordably available to consumers and businesses alike \cite{sun2019summarizing}, results in AI that is accessible by many.
|
||||
|
||||
\section{State of the industry} \label{section:industry}
|
||||
|
||||
In contrast with this trend, the software landscape around packaging, deploying, and maintaining machine learning (ML) --- and in general --- data-heavy applications paints a different picture. Fortunately, the related issues and their ramifications have been already thoroughly investigated.
|
||||
In contrast to this trend, the software landscape around packaging, deploying, and maintaining machine learning (ML) --- and in general --- data-heavy applications paints a different picture. Fortunately, the related issues and their ramifications have already been thoroughly investigated.
|
||||
|
||||
When looking at ML code in practice through the lens of technical debt, Sculley et al. \cite{sculley2015hidden} emphasise the repercussions of writing \textit{glue code} between the algorithms and different systems or libraries and define it as an anti-pattern. The consequence of this is the advice against using generic libraries because their rigid API-s may inhibit improvements, cause lock-in, and result in large amounts of glue code. This is a recurring theme in discussions with industry professionals.
|
||||
When looking at AI/ML code in practice through the lens of technical debt, Sculley et al. \cite{sculley2015hidden} emphasise the repercussions of writing \textit{glue code} between the algorithms and different systems or libraries and define it as an anti-pattern. The consequence of this is the advice against using generic libraries because their rigid APIs may inhibit improvements, cause lock-in, and result in large amounts of glue code. This is a recurring theme in discussions with industry professionals.
|
||||
|
||||
Haakman et al. \cite{haakman2021ai} interviewed 17 people at ING which is a well-known fintech company undergoing a digital transformation to embrace AI. They found that the existing tools for ML do not meet the particularities of the field. For instance, a Feature Engineer working in the Data \& Analytics department explained that regular spreadsheets are preferred over existing solutions like MLFlow for keeping track of experiment results. The reason behind this is simplicity. Additionally, multiple other interviewees described the need to self-develop (or highly-customize) dashboards for monitoring deployed models which results in many non-reusable solutions across the company for the same problem. The authors conclude that there is a research gap between the ever-improving SOTA techniques and the challenges of developing real-world ML systems. In short, additional tool support is needed for facilitating the ML lifecycle.
|
||||
Haakman et al. \cite{haakman2021ai} interviewed 17 people at ING, a well-known fintech company undergoing a digital transformation to embrace AI. They found that the existing tools for ML do not meet the particularities of the field. For instance, a Feature Engineer working in the Data \& Analytics department explained that regular spreadsheets are preferred over existing solutions like MLFlow for keeping track of experiment results. The reason behind this is simplicity. Additionally, multiple other interviewees described the need to self-develop (or highly-customise) dashboards for monitoring deployed models, resulting in many non-reusable solutions across the company for the same problem. The authors conclude that there is a research gap between the ever-improving SOTA techniques and the challenges of developing real-world ML systems. In short, additional tool support is needed for facilitating the ML lifecycle.
|
||||
|
||||
In a case study at Microsoft, Amershi et al. \cite{amershi2019software} interviewed 14 people and surveyed another 551 AI and ML professionals from the company. One of the main concerns surfaced was relating to automation which is a vital cross-cutting concern, especially for testing. At the same time, a human-in-the-loop is still favoured. The survey data pointed out the difficulty posed by integrating AI, especially in the case of less experienced respondents. This was elaborated on by describing the preferences of software engineers as striving for elegant, abstract, modular, and simple systems; in contrast, data tends to be of large volume, context-specific and heterogeneous. Reconciling these inherent differences requires significant effort, nevertheless, Microsoft manages to overcome this with highly sophisticated internal infrastructure.
|
||||
In a case study at Microsoft, Amershi et al. \cite{amershi2019software} interviewed 14 people and surveyed another 551 AI and ML professionals from the company. One of the main concerns surfaced was relating to automation which is a vital cross-cutting concern, especially for testing. At the same time, a human-in-the-loop is still favoured. The survey data pointed out the difficulty posed by integrating AI, especially in the case of less experienced respondents. This was elaborated on by describing the preferences of software engineers as striving for elegant, abstract, modular, and simple systems; in contrast, data tends to be of large volume, context-specific and heterogeneous. Reconciling these inherent differences requires significant effort. Nevertheless, Microsoft manages to overcome this with a highly sophisticated internal infrastructure.
|
||||
|
||||
Using AI is not unique to large companies, in a study conducted with the collaboration of three startups \cite{de2019understanding}, the aim was to fill in the gap of understanding how professionals develop ML systems in small companies. Overall, the results showed they have similar priorities to that of large companies, including an emphasis on the online monitoring of deployed models. However, less structure is present in the development lifecycle, as one interviewee had explained: some steps are left out from time to time because they are forgotten about.
|
||||
%The paper does not give detail about the use or in-house development of ML tools.
|
||||
Similarly, Thiée \cite{thiee2021systematic} describes the slow but ever-growing rate of ML adoption by small and medium-sized enterprises (SMEs). With the caveat that many more of these companies would wish to adopt data-driven approaches but are facing new challenges stemming from the domain's complexity.
|
||||
Using AI is not unique to large corporations; in a study conducted with the collaboration of three startups \cite{de2019understanding}, the aim was to fill in the gap of understanding how professionals develop ML systems in small companies. Overall, the results showed they have similar priorities to that of large companies, including an emphasis on the online monitoring of deployed models. However, less structure is present in the development lifecycle, as one interviewee explained: some steps are left out from time to time because they are forgotten. Similarly, Thiée \cite{thiee2021systematic} described the slow but ever-growing rate of ML adoption by small and medium-sized enterprises (SMEs). With the caveat that many more of these companies would wish to adopt data-driven approaches but are facing new challenges stemming from the domain's complexity.
|
||||
|
||||
Serban et al. \cite{serban2020adoption,serban2021practices} describe the results of their global surveys aiming to ascertain the SOTA in how teams develop, deploy, and maintain ML systems. In \cite{serban2020adoption}, they compiled a set of 29 actionable best practices. These were analysed and validated with a survey of 313 participants to discover the adoption rate and relative importance of each best practice. For example, they determined the most important best practice to be \textit{logging production prediction traces}, however, the adoption was measured to be below 40\%. In more than three quarters of the cases, newcomers to AI reported that they \textit{partially} or \textit{not at all} follow best practices. This tendency decreases with more years of experience, reaching a minimum of just below 40\%. In a similar fashion, Serban et al. in \cite{serban2021practices}, identify another 14 best practices that concern trustworthy AI mainly through data governance. They strive to complement high-level checklists with actionable best practices. Analysing 42 survey responses reveals a familiar pattern. Most best practices have less than 50\% adoption.
|
||||
Serban et al. \cite{serban2020adoption,serban2021practices} described the results of their global surveys aiming to ascertain the SOTA in how teams develop, deploy, and maintain ML systems. In \cite{serban2020adoption}, they compiled a set of 29 actionable best practices. These were analysed and validated with a survey of 313 participants to discover the adoption rate and relative importance of each. For example, they determined the most important best practice to be \textit{logging production prediction traces}; however, the adoption was measured to be below 40\%. In more than three-quarters of the cases, newcomers to AI reported that they \textit{partially} or \textit{not at all} follow best practices. This tendency decreases with more years of experience, reaching a maximum adoption rate of just above 60\%. Furthermore, Serban et al., in \cite{serban2021practices}, identified another 14 best practices that concern trustworthy AI, mainly through data governance. They strove to complement high-level checklists with actionable best practices. Analysing 42 survey responses revealed a familiar pattern: most best practices had less than 50\% adoption.
|
||||
|
||||
Finally, Bosch et al. \cite{bosch2021engineering} organise and structure the problem space of AI engineering research based on their 16 primary case-studies. The authors note the increasing and broad adoption of ML in the industry, while also emphasising that \textit{transition from prototype to production-quality deployment} proves to be challenging for many companies. Large amounts of software engineering expertise is required to create additional facilities for the application such as data pipelines, monitoring, and logging. They define \textit{deployment \& compliance} to be one of the four main categories of problems and describe it as highly underestimated and the source of ample struggle.
|
||||
John et al. \cite{john2020architecting} compared and contrasted recent scientific and grey literature on AI deployments from which they extracted concrete challenges and practices. They also observed that most companies are placing many more models into production than in previous years. Additionally, they pointed out that numerous deployment techniques are absent from contemporary literature, which is speculated to be caused by the immaturity of deployment processes employed in academia. Because for instance, most models in scientific literature experience only initial deployment and are not constantly replaced or refreshed as their performance degrades over time.
|
||||
|
||||
Finally, in a follow-up study to \cite{john2020architecting}, Bosch et al. \cite{bosch2021engineering} organised and structured the problem space of AI engineering research based on their 16 primary case studies. The authors noted the increasing and broad adoption of ML in the industry while also emphasising that the \textit{transition from prototype to production-quality deployment} proves to be challenging for many companies. Solid software engineering expertise is required to create additional facilities for the application, such as data pipelines, monitoring, and logging. They defined \textit{deployment \& compliance} to be one of the four main categories of problems and described it as highly underestimated and the source of ample struggle.
|
||||
|
||||
\section{Existing solutions} \label{section:existing}
|
||||
|
||||
From the previous section, it is noticeable that given enough resources and at the scale of 4195 AI professionals, Microsoft managed to create a comprehensive in-house solution. A similar impression is given by Uber \cite{li2017scaling}; they built a highly sophisticated infrastructure using techniques from distributed and high-performance computing. Though, the authors note that even this solution has its shortcomings in the form rigidity (number of supported libraries and model types) but it still allows the easy extension of the system.
|
||||
It is noticeable that given enough resources and at the scale of 4195 AI professionals, Microsoft managed to create a comprehensive in-house solution. A similar impression is given by Uber \cite{li2017scaling}; they built a highly sophisticated infrastructure using techniques from distributed and high-performance computing. Though the authors note that this solution still has shortcomings in the form of rigidity (number of supported libraries and model types), it also allows for the easy extension of the system. Given the nature of the concerns and the amount of available resources, it is not surprising that both high-tech Fortune 500 companies needed to and did overcome the problems presented by deploying AI. We can learn from their approaches; nonetheless, using them may be infeasible for individuals and SMEs. Thus, the issues remain for the majority of practitioners.
|
||||
|
||||
Given the nature of problems faced and amount of available resources, it is not surprising the both of these high-tech, Fortune 500 companies needed to, and did overcome the problems presented by deploying AI. We can learn from their approaches, nonetheless, using them may be infeasible for individuals and SMEs, thus, the issues remain for the majority of practitioners. Luckily, the open-source scene of AI/ML/DS tools, libraries, frameworks, and platforms is thriving. Additionally, there is a considerable number of closed-source --- usually platforms-as-a-service (PaaS) --- solutions next to them. Let us look at some prominent examples.
|
||||
|
||||
IBM's AutoAI \cite{wang2020autoai} promises to provide automation for the entire machine learning lifecycle, including deployment. It is a closed-sourced, paid service which --- from their documentation --- seems to focus mostly on non-technical users by providing them with a UI for authoring models. The restrictions caused by the encapsulation of the entire process can be severe. The challenges of integration were emphasised above \cite{sculley2015hidden}. Additionally, an engineer working on Microsoft's comparable solution, the Azure ML Studio, highlighted that once users gain enough understanding of ML, such visual tools can get in their way, and they may need to seek out other solutions \cite{amershi2019software}. Unfortunately, the main value proposition of Azure ML Studio is also to provide a UI for laypeople, and it has also been set to be retired by 2024. Its successor is Azure Machine Learning which shares many similarities with AWS's SageMaker suite \cite{joshi2020amazon}.
|
||||
|
||||
SageMaker offers the most comprehensive suite of tools and service; most importantly it has a set of features called \textit{AWS SageMaker MLOps}. This provides easy and/or default implementations for industry best practices described by Serban et al. \cite{serban2020adoption,serban2021practices}. Among others, it promotes the use of CI/CD, model monitoring, tracing, model versioning, storing both data and models on shared infrastructure, numerous collaboration tools, etc. Nonetheless, SageMaker does not enjoy universal adoption as indicated by the survey data. The cause of this may be the lack of self-hosting option and its relatively high prices: many companies prefer on-premise hosting for privacy and financial reasons \cite{bosch2021engineering}. Additionally, vendor lock-in, and possibly --- in the case where it is not already used for the project --- the initial effort required for setting up AWS integration could be possible deterrents.
|
||||
|
||||
When it comes to open-source libraries, we can find the MLOps libraries of both TensorFlow and PyTorch: TensorFlow Extended (TFX) \cite{baylor2017tfx} and TorchX\footnote{\href{https://pytorch.org/torchx/latest/}{pytorch.org/torchx/latest}}. TFX comes with a more mature set of features with the caveat that initial time-investment is needed for their setup. The features of TorchX only concern the distributed deployment to a wide range of providers, including Kubernetes, AWS Batch, or Ray. There is no augmentation for the SE4ML best practices. Given the tight coupling between these libraries and their corresponding ML frameworks, they cannot generalise to models\footnote{The Open Neural Network Exchange (\href{https://onnx.ai/}{onnx.ai}) format could be an option for overcoming these incompatibilities, however, a more universal support is needed for seamless integration.} or algorithms of other frameworks and technologies.
|
||||
|
||||
Open-source platforms also exist such as MLflow and Seldon Core. They both rely on Kubernetes (k8s) to provide their features. MLflow puts more emphasis on the training phase (in deployment, it lacks a feedback loop which is essential to reach many of the best-practices), while Seldon Core focuses on the deployment stage. The latter comes integrated with a powerful explanation engine, Alibi Explain \cite{klaise2021alibi}. It also boasts the most comprehensive suite of features including outlier detection, online model selection (with multi-armed bandit theory), and distributed tracing. In short, it seems to be the ideal candidate for the title of \textit{framework for robust end-to-end AI deployments}. Its only downside is the amount of complexity propagated to its clients: it is built on top of Kubernetes, and relies on Helm, Ambasador/Istio, Prometheus, and Jaeger for its features. Hence, the first step in using it setting up a k8s cluster with all the required components, then when it comes to model deployment, a Kubernetes configuration file has to be created to make use of Seldon's Custom Resource Definition. These are smaller obstacles if the project is already built on top of k8s; however, even then, software engineers with strong cloud and DevOps background are actively required for using Seldon Core.
|
||||
|
||||
\begin{table}
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\begin{threeparttable}
|
||||
\caption{High-level comparison of popular AI deployment platforms and libraries.}
|
||||
|
|
@ -51,30 +41,46 @@ Open-source platforms also exist such as MLflow and Seldon Core. They both rely
|
|||
{\renewcommand{\arraystretch}{1.2} % for the vertical padding
|
||||
\begin{tabular}{|l|c|c|c|c|c|c|c|}
|
||||
\hline
|
||||
& AutoAI & Azure ML & SageMaker & TFX & TorchX & MLflow & Seldon Core \\ \hline
|
||||
Open-source & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Free & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Vendor-agnostic & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
AI-agnostic & & \checkmark & \checkmark & & & \checkmark & \checkmark \\ \hline
|
||||
E2E feedback & & \checkmark & \checkmark & & & & \checkmark \\ \hline
|
||||
Distributed monitoring & & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark\textsuperscript{*} & \checkmark \\ \hline
|
||||
Online model selection & \checkmark & \checkmark & \checkmark & & & & \checkmark \\ \hline
|
||||
Versioning & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Quick setup & \checkmark & \checkmark & & & & & \\ \hline
|
||||
No dependencies (k8s, cloud) & & & & & \checkmark & & \\ \hline
|
||||
& AutoAI & Azure ML & SageMaker & TFX & TorchX & MLflow & Seldon Core \\ \hline
|
||||
Open-source\textsuperscript{1} & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Self-hosted\textsuperscript{1} & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Vendor-agnostic\textsuperscript{2} & & & & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
AI-agnostic\textsuperscript{2} & & \checkmark & \checkmark & & & \checkmark & \checkmark \\ \hline
|
||||
E2E feedback\textsuperscript{3} & & \checkmark & \checkmark & & & & \checkmark \\ \hline
|
||||
Distributed monitoring\textsuperscript{3} & & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark\textsuperscript{*} & \checkmark \\ \hline
|
||||
Online model selection\textsuperscript{3} & \checkmark\textsuperscript{*} & \checkmark & \checkmark & & & & \checkmark \\ \hline
|
||||
Versioning\textsuperscript{3} & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark & \checkmark \\ \hline
|
||||
Quick setup\textsuperscript{4} & \checkmark & \checkmark & & & & & \\ \hline
|
||||
No DevOps dependencies\textsuperscript{4}& & & & & \checkmark & & \\ \hline
|
||||
\end{tabular}}
|
||||
\begin{tablenotes}
|
||||
\item[1] For privacy and accountability reasons. \cite{bosch2021engineering}
|
||||
\item[2] Minimising required glue code. \cite{sculley2015hidden}
|
||||
\item[3] Implementing best practices. \cite{serban2020adoption,serban2021practices,john2020architecting}
|
||||
\item[4] Easy integration into existing processes. \cite{haakman2021ai,thiee2021systematic}
|
||||
\item[*] Only partial support.
|
||||
\end{tablenotes}
|
||||
\end{threeparttable}
|
||||
\end{table}
|
||||
|
||||
Table \ref{table:platform-comparison} shows a high-level overview about the general properties, and some of the features relating to the \textit{Deployment} stage of the CRISP-DM model \cite{wirth2000crisp}. It makes it apparent that there is a coexistence of persisting problems and their promised solutions.
|
||||
Luckily, the open-source scene of AI/ML/DS tools, libraries, frameworks, and platforms is thriving. Additionally, there is a considerable number of closed-source --- usually platforms-as-a-service (PaaS) --- solutions next to them. Let us look at some prominent examples. Table \ref{table:platform-comparison} shows a high-level comparison of frameworks along the dimensions in which practitioners reportedly face difficulties in the \textit{Deployment} stage of the CRISP-DM model \cite{wirth2000crisp}.
|
||||
|
||||
Additionally, increasing attention is given to ML deployments in embedded systems both from a theoretical \cite{john2020ai} and practical \cite{prado2020bonseyes} point of view. Prado et al. \cite{prado2020bonseyes} survey the available deployment frameworks and end-to-end solutions including those for embedded devices. They note their inefficiencies that come from the lack of features and too much rigidity. They introduce their framework for embedded AI deployments which can be used out-of-the box but also lets the users easily replace and extend its pipeline with steps to fit their changing needs and advancements of the field. While Meenu et al. \cite{john2020ai} present and compare different architectural choices for large-scale deployments in edge-computing. They also note that: \textit{"...there is a need to consider and adapt well established SE practices which have been ignored or had a very narrow focus in ML literature"}.
|
||||
IBM's AutoAI \cite{wang2020autoai} promises to provide automation for the entire machine learning lifecycle, including deployment. It is a closed-sourced, paid service which --- from their documentation --- seems to focus primarily on non-technical users by providing them with a graphical user interface (GUI) for authoring models. The restrictions caused by the encapsulation of the entire process can be severe: the challenges of integration were emphasised above \cite{sculley2015hidden}. Additionally, an engineer working on Microsoft's comparable solution, the Azure ML Studio, highlighted that once users gain enough understanding of ML, such visual tools can get in their way, and they may need to seek out other solutions \cite{amershi2019software}. Unfortunately, the main value proposition of Azure ML Studio is also to provide a GUI for laypeople, and it has also been set to be retired by 2024. Its successor is Azure Machine Learning which shares many similarities with AWS's SageMaker suite \cite{joshi2020amazon}.
|
||||
|
||||
SageMaker offers the most comprehensive suite of tools and services; most importantly, it has a set of features called \textit{AWS SageMaker MLOps}. This provides easy and/or default implementations for multiple industry best practices described in \cite{serban2020adoption,serban2021practices,john2020ai}. Among others, it promotes using CI/CD, model monitoring, tracing, model versioning, storing both data and models on shared infrastructure, numerous collaboration tools, etc. Nonetheless, SageMaker does not enjoy universal adoption, as indicated by the survey data. The cause of this may be the lack of a self-hosting option and its relatively high prices: many companies prefer on-premise hosting for privacy, and financial reasons \cite{bosch2021engineering}. Additionally, vendor lock-in and possibly --- in the case where it is not already used for the project --- the initial effort required for setting up AWS integration could be likely deterrents.
|
||||
|
||||
When it comes to open-source libraries, we can find the MLOps libraries of both TensorFlow and PyTorch: TensorFlow Extended (TFX) \cite{baylor2017tfx} and TorchX\footnote{\href{https://pytorch.org/torchx/latest/}{pytorch.org/torchx/latest}}. TFX comes with a more mature set of features with the caveat that initial time investment is needed for their setup. The features of TorchX only concern the distributed deployment to a wide range of providers, including Kubernetes (K8s), AWS Batch, or Ray \cite{moritz2018ray}. There is no augmentation for most deployment best practices. Given the tight coupling between these libraries and their corresponding ML frameworks, they cannot generalise to models or algorithms of other frameworks and technologies. The Open Neural Network Exchange\footnote{\href{https://onnx.ai/}{onnx.ai}} format could be an option for overcoming these incompatibilities. However, wider support would be needed for seamless integration.
|
||||
|
||||
Open-source platforms also exist, such as MLflow and Seldon Core. They both rely on Kubernetes to provide their features. MLflow emphasises the training phase (in deployment, it lacks a feedback loop which is essential for reaching many of the best practices), while Seldon Core focuses on the deployment stage. The latter comes integrated with a powerful explanation engine, Alibi Explain \cite{klaise2021alibi}. It also boasts the most comprehensive suite of features, including outlier detection, online model selection (with multi-armed bandit theory), and distributed tracing.
|
||||
|
||||
In short, it seems to be the ideal candidate for the title of \textit{framework for robust end-to-end AI deployments}. Its only downside is the amount of complexity propagated to its clients: it is built on top of Kubernetes and relies on Helm, Ambassador/Istio, Prometheus, and Jaeger for its features. Hence, the first step in using it is setting up a K8s cluster with all the required components; then, when it comes to model deployment, a Kubernetes configuration file must be created to use Seldon's Custom Resource Definition. These are minor obstacles if the project is already built on top of K8s; however, even then, software engineers with solid cloud and DevOps backgrounds are actively required to use Seldon Core.
|
||||
|
||||
Additionally, increasing attention is given to ML deployments in embedded systems both from a theoretical \cite{john2020ai} and practical \cite{prado2020bonseyes} point of view. Prado et al. \cite{prado2020bonseyes} survey the available deployment frameworks and end-to-end solutions, including those for embedded devices. They note the inefficiencies of these that come from the lack of features and too much rigidity. They introduce their framework for embedded AI deployments, which can be used out-of-the-box but also lets users easily replace and extend its pipeline to fit their changing needs and advancements in the field.
|
||||
|
||||
At the same time, Meenu et al. \cite{john2020ai} present and compare different architectural choices for large-scale deployments in edge computing. They also note that: \textit{``...there is a need to consider and adapt well-established software engineering practices which have been ignored or had a very narrow focus in ML literature''}. In summary, the issues expressed in Section \ref{section:industry} can be understood when looking at the available solutions.
|
||||
|
||||
\section{Summary}
|
||||
|
||||
The surveys and case-studies have shown the industry's continuous struggle to evolve their prototypes into robust and responsible production-ready deployments. Simultaneously, platforms aiming to help overcome this challenge already exist but lack widespread adoption. The frequently recurring explanations for not adopting pre-existing solutions surfaced in Section \ref{section:industry} revolve around their complexity and rigidity. These complaints are validated when looking at the available frameworks in Section \ref{section:existing}. While using AI has become more accessible than ever, deploying remains challenging owing to the lack of any \textit{easy-to-use framework for robust end-to-end AI deployments}.
|
||||
The surveys and case studies have shown the industry's continuous struggle to evolve prototypes into robust and responsible production-ready deployments. Simultaneously, platforms aiming to help overcome this challenge already exist but lack widespread adoption. The frequently recurring explanations for not adopting existing solutions surfaced in Section \ref{section:industry} revolve around their complexity and rigidity. These complaints are validated when looking at the available frameworks in Section \ref{section:existing}. While using AI has become more accessible than ever, deploying remains challenging owing to the lack of any easy-to-adopt framework for robust end-to-end AI deployments.
|
||||
|
||||
The coexistence of multiple major obstacles along with their promised solutions and the lack of their wide-spread adoption leads us to believe that current frameworks are inadequate for many contexts. There is an unmet need for accessible AI deployment methods. The revolution brought by FLAIR, HuggingFace, and similar libraries for the domain of ML remains unmatched in the domain of AI engineering.
|
||||
The coexistence of multiple major obstacles, along with their promised solutions and the lack of their widespread adoption, leads us to believe that current frameworks are inadequate for many contexts, especially in cases where teams lack the background in cloud, operations, and more generally, software engineering. Thus, the answer to \textbf{RQ1} is that the complexity of deploying AI can severely hinder industrial applications even in the presence of existing frameworks. There is an unmet need for accessible AI deployment methods. The revolution brought by FLAIR, Hugging Face, and similar libraries for the domain of AI/ML remains unmatched in the field of AI Engineering and MLOps.
|
||||
|
|
|
|||
|
|
@ -1,27 +1,45 @@
|
|||
\chapter{Methods} \label{chapter:methods}
|
||||
|
||||
The chosen methodology for this study is Design Science which emphasises the need to design and investigate artifacts in their context \cite{wieringa2014design}. It consists of a design and an empirical cycle. The purpose of the former is to improve a problem context with a new or redesigned artifact. While in the latter, the problem is investigated and its potential treatment is validated concurrently. The design cycle shares similarities with Action Research \cite{davison2004principles}, where the researchers attempt to solve a real-world problem while simultaneously studying the experience of solving said problem.
|
||||
The chosen methodology for this study is Design Science which emphasises the need to design and investigate artifacts in their contexts \cite{wieringa2014design}. It consists of a design and an empirical cycle. The purpose of the former is to improve a problem context with a new or redesigned artifact, while in the latter, the problem is investigated, and its potential treatment is validated concurrently. This strategy seems fitting for our problem in consequence of its practical nature.
|
||||
|
||||
As for the empirical cycle, the pragmatist approach is taken since the value of this research lies in its utility. Moreover, pragmatism adopts an engineering approach to research \cite{shull2007guide} which is inline with the philosophy of design science. Additionally, as no research method is without flaws, it is imperative to try to compensate their weaknesses by applying multiple methods. Hence, the study also relies on interviews with professionals for validating the design decisions of \textit{GreatAI}.
|
||||
The design cycle shares similarities with Action Research \cite{davison2004principles} in which researchers attempt to solve a real-world problem while simultaneously studying the experience of solving said problem. As for the empirical cycle, the pragmatist approach is taken since the value of this research lies in its utility. Moreover, pragmatism adopts an engineering approach to research \cite{shull2007guide}, which happens to be in line with the philosophy of design science. Additionally, as no research method is without flaws, it is imperative to try to compensate for their weaknesses by applying multiple methods. Hence, the study also relies on interviews with professionals to validate the design decisions and determine the generalisability of \textit{GreatAI}.
|
||||
|
||||
\section{Problem context}
|
||||
\section{Design cycle}
|
||||
|
||||
The problem context is the difficulty in responsibly transitioning (while following best practices) from prototype industrial AI applications to production-ready deployments. With the possible treatment being libraries with high-level API-s and a set of default settings. It is important to note that \textit{GreatAI} is merely a proof-of-concept, and its aim is to serve as the proxy for the design decisions behind it. Through this, the design can be indirectly evaluated. Hopefully, a by-product will be a library that can be successfully applied to this problem context.
|
||||
|
||||
The practical cases used for the evaluation are further elaborated in Chapter \ref{chapter:case}. In short, they focus on individual components of a growing commercial platform with the aim of finding tech-transfer opportunities in academic publications. The main input of the system as a whole are individual PDF-files while the output is a list of metrics describing various aspects of the paper, such as interesting sentences, scientific domains, and the scientific contribution. The output also includes a predicted score used for ranking. This ranking is subsequently processed by the business developers of Technology Transfer Offices (TTO-s) of multiple Dutch and German universities who later give feedback on the results.
|
||||
|
||||
Overall, this problem context carries the properties of typical industry use-cases: it utilises a wide-range of text mining methods, contains complex interactions between the services, benefits from the integration of end-to-end feedback, and has to provide the clients with a platform that they can rely on in their organisation's core processes. Since the final ranking affects real people, explainability and robustness are also central questions.
|
||||
|
||||
\section{Design \& empirical cycles}
|
||||
|
||||
The aim of the project can be summarised using the terminology of design science in the following way:
|
||||
\textit{Facilitate the easy adoption of AI deployment best practices
|
||||
The aim of \textit{GreatAI} can be summarised using the terminology of design science in the following way:
|
||||
\textit{Facilitate the adoption of AI deployment best practices
|
||||
by finding a less complex framework design
|
||||
which is easier to adopt
|
||||
to decrease the negative externality of misused AI.}
|
||||
in order to decrease the negative externality of misused AI.}
|
||||
|
||||
However, before generalising, the design of the framework is iteratively refined using the feedback acquired from applying it in practical contexts which in this case is the research and development of a smaller and a more complex AI component followed by refactoring larger AI-based applications using the finished framework. The treatment is finding a simpler design which still leads to high-quality deployments as defined in Section \ref{section:requirements}. \textbf{RQ2} and \textbf{RQ3} captures this process; for investigating the feedback acquired from iteratively working --- which is the definition of action research --- on the case will be valuable.
|
||||
The problem context is the difficulty of responsibly transitioning (while following best practices) from prototype industrial AI applications to production-ready deployments. With the possible treatment being libraries with high-level APIs and a set of default settings. It is important to note that \textit{GreatAI} is merely a proof-of-concept, and its aim is to serve as a proxy for the design decisions behind it. Through this, the design can be indirectly evaluated. Hopefully, a by-product will be a library that can be effectively applied to this problem context.
|
||||
|
||||
To answer how well the design of \textit{GreatAI} can generalise (\textbf{RQ4}), interviews will be conducted from a population of software engineers and data scientists with varying levels of professional background. Since me and my colleagues are likely to have a bias for (or against) the proposed designs, the first step of checking its applicability in other practical contexts is to ask the opinion of non-affiliated fellow practitioners.
|
||||
The practical cases used for the evaluation are further elaborated in Chapter \ref{chapter:case}. In short, they focus on individual components of a growing commercial platform which aims to find tech-transfer opportunities in academic publications. The primary input of the system as a whole is a set PDF files, while the output is a list of metrics describing various aspects of each paper, such as interesting sentences, scientific domains, and contributions. The result also includes a predicted score used for ranking. This ranking is subsequently processed by the business developers of Technology Transfer Offices (TTOs) of multiple Dutch and German universities, who later give feedback on the results.
|
||||
|
||||
\textit{GreatAI} might have the potential to bridge the gap between data science and software engineering. Stemming from the bidirectional nature of bridges, we can look at the framework from two perspectives: for professionals closer to the field of data science, it provides an automatic scaffolding of software facilities that are required for deploying, monitoring, and iterating on their models. For software engineers, it highlights the necessary steps required for robust and improvable deployments, while at the same time saves them from the grunt work of implementing these constructs. While most importantly, it serves as a proxy for the design decisions through which they can be tested and evaluated in their practical context.
|
||||
Overall, this problem context carries the properties of typical industry use cases: it utilises a wide range of natural language processing (NLP) methods, contains complex interactions between the services, benefits from the integration of end-to-end feedback, and has to provide the clients with a platform that they can rely on within their organisation's core processes. Since the final ranking affects real people, explainability and robustness are also central questions.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=.9\linewidth]{figures/design-cycle.drawio.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Implementation of the design cycle of design science \cite{wieringa2014design} for our problem context of AI/ML deployments. The thinner arrows denote smaller but more frequent iterations.}
|
||||
\label{fig:design-cycle}
|
||||
\end{figure}
|
||||
|
||||
The goal is to find a simpler, less cognitively-straining-to-use design that still leads to high-quality deployments, the definition of which will be described in Section \ref{section:requirements}. Before generalising, the framework's design is iteratively refined using the feedback acquired from applying it in practical contexts, which in this case are the research and development of a smaller and a more complex AI component using the work-in-progress framework.
|
||||
|
||||
The design cycle summarising the research approach is shown in Figure \ref{fig:design-cycle} indicating the role of the case studies. The concerns arisen in the \textit{Treatment validation} iterations and their short discussions are highlighted in the form of \textit{Design notes}. Afterwards, they are addressed in the following \textit{Treatment design} iteration. This way, the issues are immediately considered and the proposed solutions can be traced back to the problems prompting their introduction.
|
||||
|
||||
\section{Applicability \& generalisability} \label{section:interview-setup}
|
||||
|
||||
To conclusively answer \textbf{RQ3} and \textbf{RQ4}, we conduct interviews with software engineers and data scientists with varying levels of professional background. The interview candidates were recruited from the recommendations of my acquaintances, who were kindly asked to seek out people from their professional networks with any connection to AI/ML. After the first few interviews, participants were also asked to suggest other candidates, preferably from different subfields. After two iterations of reaching out to potential interviewees personally, ten engineers and researchers eventually responded positively and participated in the study. Albeit the sample size is small, it still represents a wide range of organisation types: experts were included from startups, consultancies, government organisations, and research companies.
|
||||
|
||||
First, before their interview, participants are requested to complete a questionnaire (shown in Appendix \ref{appendix:practices}) about their last completed AI project; the questions refer to the best practices implemented by \textit{GreatAI}. They are also advised to take a quick look at the tutorial page of the documentation.
|
||||
|
||||
The interviews are divided into two halves. In the first part, after a brief introduction, interviewees are asked to solve a real-world deployment task by finishing a partially completed example project\footnote{Available at \href{https://github.com/schmelczer/great-ai-interview-task}{github.com/schmelczer/great-ai-interview-task}. The training part of the task has already been done, and the participants only have to deploy the trained classifier.} using \textit{GreatAI}. This is a more straightforward instance of the AI development lifecycle presented in the \textit{GreatAI} tutorials. They are also encouraged to think aloud so their feedback can be noted. Successfully completing the task creates a system implementing a known number of best practices. This way, the added value --- in terms of a larger number of implemented best practices --- can be quantitatively analysed by comparing the qualities of the finished implementation with the previously given answers. The target duration for the interviews is approximately one and a half hours.
|
||||
|
||||
We follow the guidelines proposed by Halcomb et al. \cite{halcomb2006verbatim} for collecting information from interviews and reporting it. This reflexive, iterative process starts by recording participants (with their permission) and concurrent note-taking. Reflective journaling is immediately done post-interview, which is subsequently extended and revised by listening to the recordings. Afterwards, we interpret the gathered information by applying the methodology of thematic analysis \cite{alhojailan2012thematic}. Thematic analysis is an iterative qualitative investigation technique consisting of labelling, correlating, and structuring the central recurring topics raised during discussions. It has been successfully used in previous software engineering studies for extracting emergent patterns \cite{haakman2021ai,cruz2019catalog}.
|
||||
|
||||
The second half of the one-on-one sessions consists of a short survey allowing us to create the Technology Acceptance Model (TAM) \cite{davis1989perceived} of the problem context. The ultimate goal of the presented library is to help increase the adoption rate of best practices. In order to reach that goal, first, the library itself has to gain adoption. TAM and its numerous variations provide means of measuring users' willingness of adopting new technologies. TAM has been widely applied in literature \cite{marangunic2015technology}, and due to its general psychological origins, it proves to be effective in other areas of technology, not just software \cite{riemenschneider2002explaining}.
|
||||
|
||||
We employ the parsimonious version of TAM, which has been measured to have similar predictive power to that of the original TAM while having fewer variables \cite{wu2011user}. Parsimonious TAM observes three interconnected human aspects that influence the actual behaviour (adoption): \textit{perceived usefulness}, \textit{perceived ease of use}, and \textit{intention to use}. Participants are asked ten questions corresponding to these aspects of their experience using \textit{GreatAI}. The questionnaire is shown in Appendix \ref{appendix:questions}. The internal consistency of the answers is calculated using Cronbach's Alpha \cite{bland1997statistics}, after which we reflect on the responses.
|
||||
|
|
|
|||
|
|
@ -1,62 +1,111 @@
|
|||
\chapter{Designing the framework} \label{chapter:design}
|
||||
|
||||
Providing the users with a high-level of abstraction is not unheard of in the domain of practical AI platforms. Many software-as-a-service products offer features for hiding the details of machine learning applications. However --- as we saw in Section \ref{section:existing} --- these tend to abstract away the details of both data science and AI-engineering, overall hindering the development process. The design proposed here aims to simplify only the deployment related concepts.
|
||||
Providing users with a high level of abstraction is not unheard of in the context of practical AI/ML platforms. Many software-as-a-service products offer features for hiding the technicalities of machine learning. However --- as we discussed in Section \ref{section:existing} --- these tend to abstract away the details of both data science and AI engineering, overall hindering the development process. The design proposed here aims to tackle and simplify only the deployment-related concepts.
|
||||
|
||||
\section{Scope} \label{section:scope}
|
||||
|
||||
As highlighted by several case studies in Chapter \ref{chapter:background}, the transition from prototypes to production-ready systems is often named as the source of unexpected struggle. Maybe it is not a coincidence that a significant portion of the SE4ML best practices should be implemented in this phase as well. Unfortunately, it is easy to gloss over them while tackling the underestimated difficulties of this \textit{transition}. Therefore, the aim of GreatAI is to ease this step of the life-cycle, consequently, its scope is limited to the \textit{transition} step.
|
||||
As highlighted by several case studies in Chapter \ref{chapter:background}, the transition from prototypes to production-ready systems is often named as the source of unexpected struggle. Maybe it is not a coincidence that a significant portion of the SE4ML best practices should be implemented in this phase. Unfortunately, it is easy to gloss over them while tackling the underestimated difficulties of this \textit{transition}. Therefore, the aim of \textit{GreatAI} is to ease this step of the lifecycle. Consequently, its scope is limited to the \textit{transition} step.
|
||||
|
||||
There have been attempts that at least partially address this issue, however, as we have seen in Chapter \ref{chapter:background}, these have limitations either from the perspective of best practices, or stemming from their difficulty to be adopted. To have the best chance of providing an easy-to-adopt solution, the scope has to be well-defined and limited. Because to understand the API of a library, users first have to understand its aim, surface, and have to become familiar with the problems it solves. Thus, focusing only on the \textit{transition} step seems reasonable. This step is highlighted in Figure \ref{fig:scope}.
|
||||
There have been attempts that at least partially address this issue; however, as we saw in Chapter \ref{chapter:background}, these have limitations either from the perspective of best practices or stemming from their difficulty in being adopted. The scope has to be well-defined and limited to provide the best chance of providing an easy-to-adopt solution. To understand the API of a library, users first need to understand its aim and surface and have to become familiar with the problems it solves. Thus, limiting the focus solely to the \textit{transition} step seems reasonable. This step is highlighted in Figure \ref{fig:scope}.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/scope.drawio.png}
|
||||
\caption{Usual process steps in the development life-cycle of a data-heavy software solution. The dashed arrows denote optional paths: after a prototype has been completed, there are multiple options for its deployment. The steps with blue background show the scope of GreatAI.}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Usual process steps (based on \cite{john2020architecting}) in the development lifecycle of a data-heavy software solution. The dashed arrows denote optional paths: after a prototype has been completed, there are multiple options for its deployment. The steps with blue background show the primary scope of \textit{GreatAI}.}
|
||||
\label{fig:scope}
|
||||
\end{figure}
|
||||
|
||||
It is interesting to mention that there is a proliferation\footnote{\href{https://xkcd.com/927/}{xkcd.com/927}} of platform/software as a service (PaaS/SaaS) products for deploying AI\footnote{Such as \href{https://mlem.ai/}{MLEM} or any AutoML SaaS platform, for example, \href{https://www.akkio.com/role/software-engineers}{Akkio} as these often have a one-click deployment feature as well.}. At first, these may look promising, however, they tend to only focus on getting code easily deployed in the cloud: AI best practices are not prioritised in this setup. Nevertheless, in many cases, it may be a suitable option to use such a service and these can also complement GreatAI as illustrated in Figure \ref{fig:scope}. First, the prototype is transformed into a GREAT service and materialised as a common software artifact implementing the best practices. Then, it is either deployed using a deployment SaaS, or by using the organisation's existing software deployment setup.
|
||||
It is interesting to mention that \href{https://xkcd.com/927/}{there is a proliferation} of platform/software as a service (PaaS/SaaS) products for deploying AI\footnote{Such as \href{https://mlem.ai/}{MLEM}, \href{https://streamlit.io/cloud}{Streamlit} or any AutoML SaaS platform, for example, \href{https://www.akkio.com/role/software-engineers}{Akkio} as these often have a one-click deployment feature as well.}. At first, these may look intriguing. However, they tend to only focus on getting code easily deployed in the cloud: AI best practices are not prioritised in this setup. Nevertheless, in many cases, it may be a suitable option to use such a service, and these can also complement \textit{GreatAI} as illustrated in Figure \ref{fig:scope}: first, the prototype is transformed into a \textit{GREAT} service and materialised as a common software artifact implementing best practices. Then, it is either deployed using a deployment SaaS or the organisation's existing software deployment setup.
|
||||
|
||||
\section{Design principles}
|
||||
\section{Requirements} \label{section:requirements}
|
||||
|
||||
As implied in Section \ref{section:scope}, the Unix philosophy \cite{ritchie1978unix,salus1994quarter} of software design is followed. Most notably, the design goal that encourages to \textit{write programs that do one thing and do it well.}\footnote{Of course, \textit{write programs to work together} is also very much applicable, since allowing interoperability is one of the core requirements for GreatAI.}. Apart from providing a clear and simple picture of the intended use cases for the library, this is also in line with the main notion of \textit{A Philosophy of Software Design} \cite{ousterhout2018philosophy}: API-s should be narrow and deep. A narrow width refers to having a small exposed surface area, i.e. having a small number of functions and classes in the public API. While depth implies each of them accomplishing an involved, complex goal.
|
||||
The best practices (which are referenced throughout the thesis) with which the design is concerned are a subset of those compiled by Serban et al. \cite{serban2020adoption,serban2021practices} and John et al. \cite{john2020architecting}. The core requirements --- set of covered best practices --- for a software solution that has the potential to improve our problem context are presented in the following, along with some explanation and clarification for each of them.
|
||||
|
||||
In a way, the API-s width is the price the users have to pay (the effort required for learning it) to use it, while the depth is analogous to the return they get from it. Having to learn little and being provided by a lot of functionality maximises return on investment, hence, developer experience (DX). The theoretical frameworks presented in \textit{The Programmer's Brain} \cite{hermans2021programmer} provides us with explanations and vocabulary from psychology for arguing about the cognitive aspects of API designs. In the following, two of them will be used for detailing the design principles: cognitive dimensions of code bases (CDCB) which is an extension of the cognitive dimensions of notation (CDN) framework \cite{blackwell2001cognitive}, and linguistic antipatterns \cite{arnaoudova2016linguistic}. The former comes with a set of dimensions which describe different (often competing) cognitive aspects of code that influence one's ability to perform certain tasks with it.
|
||||
\paragraph{General} Albeit not explicitly in the list of best practices, compatibility is vital in encouraging adoption. Large projects frequently end up depending on numerous packages, each of which may impose some restrictions on the code: since these all have to be satisfied simultaneously, this can result in severe constraints.
|
||||
|
||||
While linguistic antipatterns provide guidelines for improving consistency and decreasing the false sense of consistency when there is none. Also, choosing the right names for identifiers can help activate information stored in the long-term memory which makes it quicker to comprehend and easier to reason about the code \cite{deissenboeck2006concise}. Finding the most accurate and useful names is harder than it first seems. Accuracy and usefulness are already often competing goals. The more precise the name, the longer and therefore less convenient to use \cite{butler2009relating}. In short, good names are key to good API-s; consciously considering the implications of names has to be an integral part of the design process.
|
||||
The open-source scene of data-related libraries is vibrant. To take the example of data validation, there are at least four popular choices which offer varying but similar features: \href{https://github.com/SeldonIO/alibi-detect}{Alibi detect}, \href{https://github.com/PAIR-code/facets}{Facets}, \href{https://github.com/great-expectations/great_expectations}{Great Expectations}, and Data Linter \cite{hynes2017data}. The responsibility of choosing the most fitting solution falls on the user. Thus, they should not be limited in this by \textit{GreatAI}. On the contrary, the programming language (PL) of the library may be its only non-general property. Fortunately, the de facto PL for data science is Python, so implementing the library in it should not significantly limit its applicability.
|
||||
|
||||
Nonetheless, simple API-s come at a high technical cost. The library has to implement these in a way that still allows high-performance in production \cite{kleppmann2017designing} and avoids being tied to specific libraries or technologies. Inspiration for the latter may be gained from the pipelines of Prado et al. \cite{prado2020bonseyes}: they show that more freedom can be achieved with plug-and-play steps and preconfigured defaults.
|
||||
\paragraph{Robustness} In software development, robustness can be achieved by preparing the application to handle errors gracefully, even unexpected ones \cite{bishop1998robust}. Errors can and will happen in practice: storing and investigating what has led to them is required to prevent future ones. In the case of ML, errors might not be as obvious to detect as in more traditional applications (see the above-mentioned data validators). Even if a single feature's value falls outside the expected distribution, unexpected results can happen. In cases where this might lead to real-world repercussions, extra care has to be taken to construct as many safeguards as practicable. \textit{GreatAI} should support its clients in this.
|
||||
|
||||
Before diving into the concrete issues solved, let us detail the principles that should be used for implementing them in the scope of this framework.
|
||||
\paragraph{End-to-end} In this case, it refers to end-to-end feedback. That is, feedback should be gathered on the system's real-world performance, which should be taken into account when designing/training the next iteration of the model. Static datasets may fail to capture the changing nature of real life and can become outdated if they are not revised continuously. A well-packaged deployment should make it trivial to integrate new training data.
|
||||
|
||||
\paragraph{Automated} The available time of data scientists and software engineers is limited and expensive. For this reason, humans should only be involved when their involvement is necessary. Steps in the development process that can be automated without negative consequences must be automated in order to achieve efficient development processes and let the experts focus on the issues that require their attention the most.
|
||||
|
||||
\paragraph{Trustworthy} As detailed in the \href{https://digital-strategy.ec.europa.eu/en/library/ethics-guidelines-trustworthy-ai}{\textit{Ethics guidelines for trustworthy AI}}, human oversight, transparency, and accountability are some of the key requirements for trustworthy AI applications. For increasing public acceptance and trust while minimising negative societal impact, trustworthiness is essential.
|
||||
|
||||
The requirements were chosen stemming from their general importance and potential to be mostly implemented by a software framework. That is why these provide an ideal initial direction for tackling the issue. Of course, these do not cover all best practices; for instance, the ones relating to organisational processes fall outside the realm of computer science.
|
||||
|
||||
\section{Design principles} \label{section:principles}
|
||||
|
||||
Before diving into the concrete issues being solved, let us detail the principles we use while implementing their solutions. As implied in Section \ref{section:scope}, the Unix philosophy \cite{ritchie1978unix,salus1994quarter} of software design is followed. Most notably, the design goal that encourages to \textit{write programs that do one thing and do it well}. Apart from providing a clear and simple picture of the intended use cases for the library, this is also in line with the main notion of \textit{A Philosophy of Software Design} \cite{ousterhout2018philosophy}: APIs should be narrow and deep.
|
||||
|
||||
A narrow width refers to having a small exposed surface area, i.e. having a small number of functions and classes in the public API. In contrast, depth implies that each accomplishes an involved, complex goal. In a way, the width of an API is the price users have to pay (the effort required for learning it) to use it, while the depth is analogous to the return they get from it. Having to learn little and being provided with a lot of functionality maximises return on investment (ROI), hence, developer experience (DX).
|
||||
|
||||
Moreover, the theoretical frameworks presented in \textit{The Programmer's Brain} \cite{hermans2021programmer} provides us with explanations and vocabulary from psychology for arguing about the cognitive aspects of API design. In the following, two of them will be used for detailing the design principles: cognitive dimensions of code bases (CDCB) which is an extension of the cognitive dimensions of notation (CDN) framework \cite{blackwell2001cognitive}, and linguistic anti-patterns \cite{arnaoudova2016linguistic}. The former comes with a set of dimensions describing different (often competing) cognitive aspects of code that influence one's ability to perform specific tasks.
|
||||
|
||||
Linguistic anti-patterns provide guidelines for improving consistency and decreasing the false sense of consistency when there is none. Also, choosing the right names for identifiers can help activate information stored in the long-term memory, making it quicker to comprehend and easier to reason about the code \cite{deissenboeck2006concise}. Finding the most accurate and useful names is more challenging than it first seems. Accuracy and usefulness are already often competing goals: the more precise the name, the longer and, therefore, less convenient to use \cite{butler2009relating}. In short, good names are essential to good APIs; consciously considering the implications of names must be an integral part of the design process.
|
||||
|
||||
Nonetheless, simple APIs come with a high technical cost. The library has to implement these in a way that still allows for high performance in production \cite{kleppmann2017designing} and avoids being tied to specific libraries or technologies. Inspiration for the latter may be gained from the ML pipelines of Prado et al. \cite{prado2020bonseyes}: they show that more freedom can be achieved with plug-and-play steps and preconfigured defaults.
|
||||
|
||||
\subsection{Default configuration}
|
||||
|
||||
Existing frameworks oftentimes suffer from the entanglement of numerous levels of abstractions. Instead of exposing each implementation detail and encouraging users to interact with most of them, many of these could be abstracted away. Where configuration may be helpful for advanced users, default values can still be chosen automatically while providing an override option where necessary.
|
||||
Existing frameworks frequently suffer from the entanglement of numerous levels of abstractions.\footnote{\href{https://grugbrain.dev/\#grug-on-apis}{grugbrain.dev/\#grug-on-apis}} Instead of exposing each implementation detail and encouraging users to interact with most of them, these can be abstracted away in a more high-level layer. Even where configuration may be helpful for advanced users, default values can still be chosen automatically while providing an override option where necessary.
|
||||
|
||||
For example, tracing the evaluations and the model versions used in a distributed fashion is very much expected of a trustworthy system. Hence, turning this feature on by default but allowing opting-out from it can result in less scaffolding required from the library's user. It also decreases their up-front cognitive load which by definition flattens the learning-curve \cite{hermans2021programmer}. Similar features can be imagined for providing an access API for the algorithms and for giving feedback, marking outliers, etc.
|
||||
For example, tracing the evaluations and the model versions used in a distributed fashion is very much expected of a trustworthy system. Hence, turning this feature on by default but allowing opting-out from it can result in less scaffolding required from the library's users. It also decreases their up-front cognitive load, which by definition flattens the learning-curve \cite{hermans2021programmer}. Similar features can be imagined for providing a service API for the algorithms, giving feedback, marking outliers, and more.
|
||||
|
||||
Being \textit{automated} is listed as a requirement but it is imperative to only automate for simplifying and not for hiding decisions. More precisely, guessing must not be a part of automation. For instance --- an otherwise incredibly useful WebGL library --- TWGL.js\footnote{\href{https://twgljs.org/}{twgljs.org}} has a feature for automatically guessing the type of vectors based on their names. If it matches the \texttt{/colou?r/i} pattern, it is treated as a vector with 3 components\footnote{\href{https://github.com/greggman/twgl.js/blob/e3a8d0ed09f7f5cd4be0e4cb5976081c2b5013aa/src/attributes.js\#L139}{\tiny github.com/greggman/twgl.js/blob/e3a8d0ed09f7f5cd4be0e4cb5976081c2b5013aa/src/attributes.js\#L139}}. It is easy to imagine that this can help in certain scenarios, but it does so at the cost of immense confusion when renaming a variable breaks the application. In CDCB, this equates to scoring high on the dimension of \textit{Hidden dependencies} and low on \textit{Visibility}.
|
||||
Being \textit{automated} is listed as a requirement, but it is imperative to only automate for simplifying and not for hiding decisions. More precisely, guessing must not be a part of automation. For instance --- an otherwise handy WebGL library --- TWGL.js, has a feature for automatically guessing the type of vectors based on their names. Suppose it matches the \texttt{/colou?r/i} pattern. In that case, it is treated as a vector with three components\footnote{\href{https://github.com/greggman/twgl.js/blob/e3a8d0ed09f7f5cd4be0e4cb5976081c2b5013aa/src/attributes.js\#L139}{\tiny github.com/greggman/twgl.js/blob/e3a8d0ed09f7f5cd4be0e4cb5976081c2b5013aa/src/attributes.js\#L139}}. It is easy to imagine that this can help in certain scenarios. Still, it does so at the cost of immense confusion when correctly renaming a variable breaks the application. In CDCB, this equates to scoring high on the dimension of \textit{Hidden dependencies} and low on \textit{Visibility}.
|
||||
|
||||
Learning from this, any kind of guessing must be avoided for creating a pleasant API. However, this is in conflict with providing defaults for each configuration value. Even if these would be reasonable defaults derived from educated guesses, they are still merely guesses. Nevertheless, if the users are required to specify each configuration option, that leads to considerably more boilerplate code. This verbosity is captured by the \textit{Diffuseness} dimension of CDCB and, of course, should be minimised.
|
||||
Learning from this, any guessing must be avoided to create a pleasant API. However, this conflicts with providing defaults for each configuration value. Even if these would be reasonable defaults derived from educated guesses, they are still merely guesses. Nevertheless, if the users were required to specify each configuration option, that would lead to vastly more boilerplate code. This verbosity is captured by the \textit{Diffuseness} dimension of CDCB and, of course, should be minimised.
|
||||
|
||||
To resolve this conflict, GreatAI should have recommended values instead of defaults. This can mean a context object (as suggested in \cite{ousterhout2018philosophy}), which contains the result of each design decision that has to be made for a service's deployment. If not configured manually, the recommended values are applied, just like defaults. The values chosen for each parameter must be clearly highlighted. Coming from the library's single responsibility, the number of parameters should not be immense, hence, the user can be expected to comprehend them instead of just being overwhelmed and skimming it.
|
||||
To resolve this conflict, \textit{GreatAI} should have recommended values instead of defaults. This can mean a context object (as suggested in \cite{ousterhout2018philosophy}), which contains the result of each design consideration that has to be made for a service's deployment. If not configured manually, the recommended values are applied automatically, just like defaults. However, the values chosen for each parameter must be clearly highlighted. Coming from the library's single responsibility, the number of parameters should not be immense; hence, the user can be expected to comprehend them instead of just being overwhelmed and skipping them.
|
||||
|
||||
This way, the library attempts to notify its user about the existence of these decisions but does not force them to manually decide. As a result, no initial configuration is needed for starting out with the library (high \textit{Provisionality}, low \textit{Diffuseness}) and the dependencies are not hidden since they are explicitly highlighted.
|
||||
This way, the library attempts to notify its user about the existence of these decisions but does not force them to decide manually. As a result, no initial configuration is needed for starting out with the library (high \textit{Provisionality}, low \textit{Diffuseness}), and the dependencies are not hidden since they are explicitly highlighted.
|
||||
|
||||
\subsection{Documentation}
|
||||
|
||||
Without a doubt, good documentation is a prerequisite for adoption. Documentation comes in multiple forms: modern integrated development environments (IDEs) tend to show a popup of a function's documentation when requested, at the same time a more comprehensive online documentation and example projects are also still expected. But descriptive error messages can be also viewed as documentation. The library should have quality documentation for all categories.
|
||||
Little value can be derived from software without good documentation; undoubtedly, good documentation is a prerequisite for adoption. Documentations come in many shapes: modern integrated development environments (IDEs) tend to show a popup of a function's description when requested (for instance, on mouse hover), but at the same time, a more comprehensive online manual and example projects are also still expected. Descriptive error messages can also be viewed as documentation.
|
||||
|
||||
Once again, we might notice two competing interests: the level-of-detail and the length of the documentation. For example, FastAPI\footnote{\href{https://fastapi.tiangolo.com/async/\#concurrent-burgers}{fastapi.tiangolo.com}}, a popular Python web framework, has extensive descriptions and explanations on all topics related to Python's import system, the HTTP protocol, concurrency, deployment, etc. The actual framework's documentation is sprinkled over these very broad topics. This is certainly helpful for beginners to acquire knowledge from a single place. Nevertheless, this high-level of accessibility actually hinders the process of finding the relevant sections (in CDCB, this shows a trade-off between the support of Searching and Comprehension tasks). My opinion is that linking to external resources about the library's domain are welcome, but the documentation must have a single responsibility: describing the library itself.
|
||||
The library must have quality documentation for all categories. Accordingly, for structuring it, the \textit{Diátaxis} philosophy is preferred \cite{Procida_Diataxis_documentation_framework} which prescribes dividing documentation into 4 parts along 2 axes: practical-theoretical and passive-active consumption. The four quadrants derived from this are tutorials, how-to guides, references, and explanations.
|
||||
|
||||
A large portion of software documentations is automatically generated from source code. This has the advantage of always keeping it in sync with code changes, however, it might also signal that the API is too large, since it is inconvenient for the developers to document it by hand.
|
||||
Once again, we might notice two competing interests: the level of detail and the length of the documentation. For example, FastAPI\footnote{\href{https://fastapi.tiangolo.com/async/\#concurrent-burgers}{fastapi.tiangolo.com}}, a popular Python web framework, has extensive descriptions and explanations on all topics related to Python's import system, the HTTP protocol, concurrency, deployment, and more. The actual framework's documentation is sprinkled over these overly broad topics. This is undoubtedly helpful for beginners to acquire knowledge from a single place. Yet, this high level of accessibility actually hinders the process of finding the relevant sections; in CDCB, this shows a trade-off between the support of \textit{Searching} and \textit{Comprehension} tasks. Diátaxis' take is that linking to external resources about the library's domain is welcome, but the documentation must have a single responsibility: describing the library itself.
|
||||
|
||||
When it comes to example code, showing at least the minimal starter code, and the way of customising it has to be showcased front and centre. It is a well-known observation that developers only read documentation when they are stuck and there might be some merit to this. Making them not get stuck --- by providing a starter code from which they can explore the API using IntelliSense-like solutions --- should be preferred. For example, another widely popular Python web framework, Flask\footnote{\href{https://flask.palletsprojects.com/en/2.1.x/}{flask.palletsprojects.com/en/2.1.x}}, at this time, has 324 uniformly styled links on its landing page. Out of these, only 2 lead to the quick start code. Of course, it is not hidden, but I argue that the DX could be improved by displaying it more prominently.
|
||||
A large portion of software documentations is automatically generated from source code, and this has the advantage of always keeping it in sync with code changes. However, it might also signal that the API is too large because it is inconvenient for the developers to document it by hand. Striking the right balance between handcrafted and automatically extracted documentation may be a vital component of good documentation.
|
||||
|
||||
When it comes to example code, showing at least a minimal starter code and the way of customising it has to be showcased front and centre. It is a well-known observation that developers only read the documentation when they are stuck, and there might be some merit to this. Helping them not get stuck --- by providing a starter code from which they can explore the API using IntelliSense-like solutions --- should be preferred. Take the example of another widely popular Python web framework, Flask\footnote{\href{https://flask.palletsprojects.com/en/2.1.x/}{flask.palletsprojects.com/en/2.1.x}}, at this time, has 324 homogeneously styled links on its landing page. Out of these, only two lead to the quick-start code. Of course, it is not hidden, but we argue that the DX could be improved by displaying where to start more prominently.
|
||||
|
||||
\subsection{Developer experience}
|
||||
|
||||
Subjectively, the key to good DX is consistency and discoverability. To give an example, the MySQL connector's Python implementation\footnote{\href{https://dev.mysql.com/doc/connector-python/en/}{dev.mysql.com/doc/connector-python/en/}} has a cursor object which exposes a \texttt{fetchone} method. Even though this naming scheme is not conventional in Python since it does not follow \href{https://peps.python.org/pep-0008/}{PEP 8}, at least the API is logical: changing \texttt{sql\_cursor.fetchone()} to \texttt{sql\_cursor.fetchall()} returns all items instead of just one. Using good and consistent names is the key to good DX.
|
||||
Subjectively, a key component of good DX is \textit{Progressive evaluation} through which development can become a highly iterative, experimental process. This is well-understood by popular data science tools, such as Jupyter Notebooks. \textit{GreatAI} also has to support some level of this, for example, in the form of auto-reload on code changes. Further key ingredients of good DX are consistency and discoverability. To give one more example, the MySQL connector's Python implementation\footnote{\href{https://dev.mysql.com/doc/connector-python/en/}{dev.mysql.com/doc/connector-python/en}} has a cursor object which exposes a \texttt{fetchone} method. Even though this naming scheme is not conventional in Python since it does not follow \href{https://peps.python.org/pep-0008/}{PEP 8}, at least the API is intuitive: changing \texttt{sql\_cursor.fetchone()} to \texttt{sql\_cursor.fetchall()} returns all items instead of just one. Using good and consistent names is the key to good DX.
|
||||
|
||||
Also, Python codebases are rarely strictly object-oriented (OO), they are a mix of functional, data-driven, and OO programming. Consequently, relying on classes for grouping related functions is not always desirable. Therefore, it is even more imperative to name similar functions similarly. This helps discoverability and chunking \cite{hermans2021programmer} which amount to quicker comprehension.
|
||||
At the same time, Python codebases are rarely strictly object-oriented (OO). They are a mix of the functional, data-driven, and OO paradigms. Consequently, relying on classes for grouping related functions is not always desirable; therefore, it is even more imperative to name similar functions similarly. This helps discoverability and chunking \cite{hermans2021programmer}, which amounts to quicker comprehension.
|
||||
|
||||
There is one more reason to prefer consistency. Humans have a limited short-term memory (STM) \cite{miller1956magical}. Even though flags as function parameters are frowned upon by some \cite{martin2009clean}, they are useful, especially, when configuring libraries. However, if there is no convention for the default value of a flag, clients have to remember the flag's name and initial value at the same time, quickly overloading their STM. Thus, in the codebase, all defaults must be \texttt{False}. Sometimes, it can result in a \textit{disable} prefix, which turn into a double negation, users shouldn't ever encounter this themselves since the doubly-negated version is the default, thus when overriding it, it is only singly-negated. This approach also implies, that something may be recommended to be turned on by default.
|
||||
There is one more reason to prefer consistency: humans have limited short-term memory (STM) \cite{miller1956magical}. Even though flags as function parameters are frowned upon by some \cite{martin2009clean}, they can be useful, especially when configuring libraries. However, if there is no convention for the default value of a flag, clients have to remember the flag's name and initial value simultaneously, quickly overloading their STM. Thus, in the codebase, all defaults must be the same, let us say, \texttt{False}. Sometimes, it can result in a \textit{disable} prefix, which may turn into a double negation. Nevertheless, users should never encounter this since the doubly-negated version is the default; thus, it is only singly negated when overriding it. This approach also implies that something may be recommended to be turned on by default.
|
||||
|
||||
\section{Architecture} \label{section:architecture}
|
||||
|
||||
Although API design has been the central subject so far, it is worth remembering that APIs are usually expected to have corresponding implementations. \textit{GreatAI} is no exception. As laid out in Section \ref{section:principles}, we strive for narrow and deep interfaces; thus, it is time to address the \textit{depth} component.
|
||||
|
||||
\textit{GreatAI} stands on the shoulders of numerous open-source packages and integrates them to provide its various features. The most fundamental dependencies and the entire library in context are shown in Figure \ref{fig:technologies}. Given a Python script or a Jupyter notebook, \textit{GreatAI} transforms the specified prediction functions into a production-ready deployment, deployable either as a Docker image, WSGI-server, or an executable relying on \texttt{uvicorn}. The complete list of dependencies can be found in the repository\footnote{\href{https://github.com/schmelczer/great-ai/blob/main/pyproject.toml}{github.com/schmelczer/great-ai/blob/main/pyproject.toml}}.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.65\linewidth]{figures/technologies.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{A very high-level overview of \texttt{GreatAI} in its context. The main dependencies are also highlighted.}
|
||||
\label{fig:technologies}
|
||||
\end{figure}
|
||||
|
||||
The general theme in the implementation is that each explicit best practice should have its distinct, loosely-coupled functions or classes. When collaboration opportunities arise, such as persisting the model versions (\nth{1} component) into prediction traces (\nth{2} component), there are three primary conduits for realising them. These are the \texttt{context} object responsible for the global configuration per process, the \texttt{FunctionMetadataStore} specifying the expected behaviour of each prediction function, and finally the \texttt{TracingContext} that is created anew for each prediction input (session).
|
||||
|
||||
After refining the framework with feedback gathered from case studies and users, we will end up with the core architecture presented in Figure \ref{fig:architecture}. The implementation is mixed-paradigm, combining the expressiveness of functional and the design patterns of object-oriented programming (OOP) in order to maintain an overall low complexity. Reflection is also utilised, especially for run-time type-checking and generating the API definitions and dashboard components. Regardless, the architecture is still presented with a syntax similar to the class diagrams of UML2 \cite{Rumbaugh2004} because it provides the freedom to express even the non-OOP design aspects.
|
||||
|
||||
For the sake of brevity, Figure \ref{fig:architecture} does not show all fields, and some related entities have been combined, e.g. the \textit{GroundTruthAPI} box represents the \texttt{add\_ground\_truth}, \texttt{query\_ground\_truth}, and \texttt{delete\_ground\_truth} functions. The client project can also access most of the presented entities, but these optional dependency arrows are not shown in the diagram. The \texttt{utilities} submodule is also left unexpanded; almost all of its functions are orthogonal with the exception of \texttt{parallel\_map}. The latter follows a textbook producer-consumer model facilitated by queues and event signals \cite{wang2020producer}.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/architecture.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{The core architecture of \textit{GreatAI} illustrated with syntax loosely-based on UML2 \cite{Rumbaugh2004}. Given its framework nature, the expected client project and the actor integrating it are highlighted; the associations between the framework and the client project are achieved through the use of decorators.}
|
||||
\label{fig:architecture}
|
||||
\end{figure}
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
\section{A complex case}
|
||||
|
||||
Let us now turn our attention towards a more complex component. The ScoutinScience Dashboard contains a full-page evaluation view for each academic publication. On this, the known metadata, historical data about the paper's topics, social media mentions, a PDF viewer showing the document, and other augmentation tools are displayed. One of these is the \textit{interesting sentences} section, which aims to summarise the paper from a technology-transfer perspective.
|
||||
|
||||
The current approach uses a simple heuristic based on a set of phrases selected by business developers and extended with the help of a word2vec model \cite{mikolov2013efficient}. The user feedback deemed this implementation slightly helpful but not adequate for providing an accurate overview. Thus, this is the baseline that I attempt to improve on in this section.
|
||||
|
||||
\begin{displayquote}
|
||||
Compared with Section \ref{section:simple-case}, this time around, the toolset of GreatAI is at our disposal. Hopefully, this will streamline the development and --- especially --- the deployment. Given its arguably higher complexity, this experiment falls closer to industrial use-cases, and hence, can give a more accurate feedback on how to further improve the API.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Background}
|
||||
|
||||
Automatic text summarisation (ATS) is one of earliest established problems of text analysis and boasts numerous promising results \cite{el2021automatic}. However, our problem requires generating a special type of summary: it must only concern a single aspect (tech-transfer) of the document. Aspect-based text summarisation has also seen some progress over the last decades \cite{berkovsky2008aspect,hayashi2021wikiasp}, but these approaches require concretely defined topics. Unfortunately, \textit{tech-transfer potential} is anything but a clear topic definition.
|
||||
|
||||
Our numerous discussions and interviews with business developers over the last years made it clear that there is no universally agreed on definition for it. At least, all of them agrees that they know it when they see it. Additionally, most of them agree that they can confidently make a decision at the granularity of sentences. This gives rise to an obvious idea: show the experts something that they can annotate. Because the time of experts is valuable, and relevant sentences are few and far between, extra care needs to be taken to improve the ratio of positive examples in the dataset. The research of Iwatsuki Kenichi on formulaic expressions (FE) \cite{iwatsuki2020evaluation,iwatsuki2021extraction,iwatsuki2021communicative,iwatsuki2022extraction} provides a promising direction to do so.
|
||||
|
||||
A formulaic expression is a phrase with zero or more slots that expresses a certain intent. In the context of scientific texts, an example\footnote{Taken from the ground-truth data at \href{https://github.com/Alab-NII/FECFevalDataset/blob/master/human_evaluation/background.tsv}{github.com/Alab-NII/FECFevalDataset}} could be: \texttt{it was not until * that}. The asterisk can be substituted with multiple terms and the intention of this expression is (likely) to describe the \textit{History of the related topics}. Iwatsuki et al. identified a set of 39 intentions, compiled a manually labelled dataset \cite{iwatsuki2020evaluation}, and developed multiple approaches for automatically extracting and classifying formulaic expressions in large corpora \cite{iwatsuki2021communicative,iwatsuki2022extraction}.
|
||||
|
||||
\subsection{Methods}
|
||||
|
||||
In the following, we explore a 2-stage retrieval approach \cite{schutze2008introduction} commonly used in the field of information retrieval. The first stage is expected to filter out sentences that are certainly not relevant from a technology-transfer perspective using Iwatsuki's formulaic expression intention labels. Subsequently, the second stage utilises a fine-tuned SciBERT model to rank the remaining sentence based on a model learned from expert annotations.
|
||||
|
||||
This approach has multiple shortcoming, for the first stage, we must assume the independence of sentences and that the FE intentions are strongly correlated with the sought after aspect. Additionally, the reranking only considers the individual relevance of the sentences instead of the overall relevance (utility) of the summary. It is expected, that stemming from the length of the documents and the sparseness of the selected sentences, that any combination of them is likely to have low redundancy.
|
||||
|
||||
TODO
|
||||
|
||||
Finetuning SciBERT \cite{jurafsky2019speech}.
|
||||
|
||||
\subsection{Results}
|
||||
|
||||
For measuring the interrater agreement, Cohen's kappa \cite{cohen1960coefficient} is calculated as shown in Equation \ref{equation:kappa}.
|
||||
|
||||
\begin{equation} \label{equation:kappa}
|
||||
\kappa_{agreement} \equiv \frac{p_{observed} - p_{expected}}{1 - p_{expected}} = 1 - \frac{1 - p_{observed}}{1 - p_{expected}}
|
||||
\end{equation}
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
\section{Bridging \textbf{the gap} with GreatAI}
|
||||
|
||||
This section briefly explores how the problems raised can be solved using GreatAI, and the API it provides to best fit the needs of its users. We first focus on the aspects of data, then, the automated wrapping of service, lastly we discuss the utility of helper functions.
|
||||
|
||||
First, let us revisit the scope. As concluded in Section \ref{section:scope}, GreatAI should ease the \textit{transition} step between prototypes and production-ready deployments. However, this leaves open the question of what constitutes to this step? There are cross-cutting concerns such as the feature extraction code: for example, feature extraction is implemented and used in the training phase but it is also deployed alongside the model. The robustness criterion has to be met by this procedure after deployment even though its implementation is only in focus at the earlier stage of the project. Since having an untested function deployed into production can have severe repercussions, I believe, assuring its correctness lies within the scope of GreatAI.
|
||||
|
||||
\subsection{Data}
|
||||
|
||||
There are two kinds of data storage need we need to address: training data and trained models. Because our code is probably already tracked under Git (and likely synced with GitHub), using the Git Large File Storage (LFS)\footnote{\href{https://git-lfs.github.com/}{https://git-lfs.github.com/}} might seem intriguing. However, it is a paid (and surprisingly expensive) service of GitHub especially when we factor in the expected sizes of the models and train data with the fact that the only way remove files counting towards our quota is to \href{https://docs.github.com/en/repositories/working-with-files/managing-large-files/removing-files-from-git-large-file-storage#git-lfs-objects-in-your-repository}{recreate the repository}.
|
||||
|
||||
The Data Version Control (DVC)\footnote{\href{https://dvc.org/}{https://dvc.org/}} open-source project provides a nearly perfect solution. It comes with a command-line interface (CLI) inspired by git's, and it can be integrated with several backend storage servers. Its only downside is of course that it is one more tool that increases the complexity of the project and the initial setup time. If this is an acceptable price to pay, then I personally recommend opting for DVC. Nevertheless, if this may prohibit a team from properly handling data according to the best practices, I present a simpler solution in the following.
|
||||
|
||||
The complexity of an API can be decreased by relying on its users preexisting knowledge. Therefore, we can reuse familiar API-s, such as the \texttt{open()} method from Python. A method is proposed which provides the same interface, however, the backing storage for it is a mixture of local disk space, S3-compatible storage, MongoDB, or any other storage backend. It provides a superset of \texttt{open()}'s interface; the same parameters can be used with it.
|
||||
|
||||
Easing development isn't just about automating everything but also making the code easy to change (which is the \textit{Viscosity} dimension of CDCB). Going from opening a local file on the disk with the built-in open method, to opening a file from S3 is as easy as changing \texttt{with open('file.txt', 'w' as f: ...} to \texttt{with LargeFileS3('file.txt', 'w' as f: ...}. In the case of the latter, an additional \texttt{version} keyword argument can also be given to lock ourselves in using as certain version which is very much desired in the case of models.
|
||||
|
||||
The obstacles coming from the intertwined nature of different models is widely recognised \cite{sculley2015hidden,haakman2021ai,amershi2019software}. This can lead to non-monotonic error propagation, meaning that improvements in one part of the system might decrease the overall system quality \cite{amershi2019software}. The importance of schema versioning in an environment of rapidly changing models and transformations is highlighted and solved for a specific use-case in \cite{van2017versioning}.
|
||||
|
||||
The expected features: progress bar, caching, automatically purging the cache, automatically deleting old remote version if requested are all present and come with recommended --- but easy to see and change --- configuration.
|
||||
|
||||
\subsection{Utilities}
|
||||
|
||||
|
||||
utilities: clean, language, parallel map \textit{Enable Parallel Training Experiments}
|
||||
|
||||
traces
|
||||
|
||||
\textit{Deployment approach}
|
||||
|
||||
% Should the order of the decorators matter? all except in one case, they're written in a way that the order doesn't matter even with the original semantics of decorators. In that one case, it cannot be written in that way. Instead of correcting a user's error, there's a mechanism looking for this error and the user is notified. Guessing the unspecified is cool, but correcting the wrong is not
|
||||
|
||||
to do
|
||||
|
||||
% During development, I wanted to check out which types of request fail -> log errors in traces
|
||||
% Even production systems are not perfect, saving and letting the users filter on the errors is useful. e.g. they can correlate it with the input
|
||||
|
||||
% I use a toy example when quickly experimenting, it's important not to overfit on it ( moving it into the library would result in a online for it, so I have to consciously avoid that), but having a very simple
|
||||
|
||||
% Argumetn/parameter names were confusing
|
||||
% offlinemode -> cacheonly mode
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
\chapter{The ScoutinScience platform} \label{chapter:case}
|
||||
|
||||
The core product of ScoutinScience B.V. is its platform. The clients are technology-transfer offices of Dutch and German universities, government organisations (e.g.: Wetsus), and corporates (e.g.: Heraeus Group, Ruma Rubber B.V.) who wish to extend the scope of their R\&D activities. ScoutinScience connects to multiple data sources of academic publications and integrates them into a single database. Each new publication is evaluated with a suite of AI components that ultimately determine its technology transfer potential. Other features are also extracted that help the users get a quick overview of the authors, topics, and contributions of a given piece of research.
|
||||
|
||||
Each client organisation gets to see a different filtered view of this database ranked by the predicted probability of technology transfer opportunities being present. The main motivation is to make these business developers' and other professionals work more efficient by showing them which papers have the largest likelihood of being considered interesting by them.
|
||||
|
||||
To achieve this, we have a service-based architecture \cite{kleppmann2017designing} on the backend, apart from the data integration, communication, and business logic, it is made up of services wrapping simpler (phrase-matching, Naive Bayes) and more sophisticated (conditional random fields, transformer) models. As we will soon see, these can also depend on each other, for instance, based on the predicted scientific domain, a different model may be applied for scoring the paper's certain aspects.
|
||||
|
||||
I was the first software engineer on the team which has grown considerably in the past two years. While architecting, designing, and integrating more and better models into our software solution, we noticed the same difficulties as described in Chapter \ref{chapter:background}. The gap between prototypes and production-ready services is larger than it seems. It is also larger than it should be. This motivated me to investigate the state-of-the-art and had found that it is insufficient in many cases. Since the ScoutinScience platform is a quite typical example of applying AI in the industry, it will serve as the real-life case, problem context, and testbed for attempting to design a solution which can advance the state-of-the-art.
|
||||
|
||||
In this chapter, the process of designing GreatAI is described along with how it fits into real-life use cases. First, a simple experiment is presented which leads to the implementation of a service, then, as the featureset of the library grows and matures, a more complex service is developed. Subsequently, the close to final library version is used to refactor existing ScoutinScinece services in order to further refine the API of GreatAI. Lastly, the final version of the design is presented and qualitatively evaluated to verify how well it satisfies the requirements described in Section \ref{section:requirements}.
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
\input{chapters/5_case/introduction}
|
||||
|
||||
\input{chapters/5_case/naive-bayes}
|
||||
\input{chapters/5_case/features}
|
||||
|
||||
\input{chapters/5_case/2-stage}
|
||||
|
||||
\input{chapters/5_case/refactoring}
|
||||
|
||||
\input{chapters/5_case/results}
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
\section{A simple case} \label{section:simple-case}
|
||||
|
||||
Using different models for slight variations of the same problem is quite commonplace in the industry. For instance, UberEats has a vast, hierarchical set of models for every country, region, and city for calculating the estimated time of delivery \cite{li2017scaling}. We have also found, that in order to best process an academic publication, knowing its domain is essential. The reason for this can be (among others) the wildly different vocabularies of different domains. For example, the term \textit{framework} in computer science almost always refers to a software artifact (usually implying high tech-transfer potential), while in every other domain, \textit{framework} is used to describe theoretical models that are less central to practical applications. Of course, it is not merely the meaning of the terms but more importantly, their distribution that varies significantly. Therefore, the topic of this section is to design and develop a domain prediction model for academic papers.
|
||||
|
||||
\subsection{Background}
|
||||
|
||||
Fortunately, this is one of the oldest subjects of text classification. In fact, Maron introduced the Naive Bayes classifier in 1961 for exactly this purpose: classifying documents' subjects. To look at a more recent approach, SciBERT \cite{beltagy2019scibert} --- a BERT \cite{devlin2018bert} model pretrained on academic publications --- was also used for a similar task in which the domains of sentences have to be decided\footnote{\href{https://paperswithcode.com/sota/sentence-classification-on-paper-field}{paperswithcode.com/sota/sentence-classification-on-paper-field}}. It achieved an F1-score of $0.6571$ after being pretrained on the Semantic Scholar Corpus (SSC) \cite{Lo2020S2ORCTS} and finetuned on the train split of the Microsoft Academic Graph (MAG) dataset \cite{wang2019review}\footnote{SciBERT was applied to a preprocessed version of this dataset available at \href{https://github.com/allenai/scibert/tree/master/data/text_classification/mag}{github.com/allenai/scibert/tree/master/data/text\_classification/mag}}.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Design note} After getting familiar with the context, it is time to focus on experimenting and developing our domain prediction service. At the same time, the difficulties encountered should be noted and integrated into GreatAI's design.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Data}
|
||||
|
||||
Two datasets will be considered for the experiments. SciBERT's MAG and the SSC. The former is used to compare the results with SciBERT's, while the latter is utilised for training a model for production purposes because it has 19 labels compared with MAG's 7 and it also contains abstracts instead of just sentences, thus, it is more fitting for our use-case.
|
||||
|
||||
SciBERT's version of the MAG dataset has 84 thousand and 22.3 thousand sentences in its train and test splits respectively. These are mostly in English and have all punctuation and casing removed. Each sentence is classified as belonging to one of seven fields. Figure \ref{fig:mag-distribtion} shows that the classes have a uniform distribution.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/mag-distribution.png}
|
||||
\caption{Class distribution of the MAG \cite{wang2019review} dataset's 84000 sentences in its \textit{train} split.}
|
||||
\label{fig:mag-distribtion}
|
||||
\end{figure}
|
||||
|
||||
SSC is much larger: it contains over 80 million abstracts. Having more data certainly helps in sampling the term distribution more accurately, the law of diminishing returns apply, especially when using simple models. Therefore, the data will be randomly downsampled to leave us with a more manageable couple of hundred megabytes of abstracts. We can see the distribution of class labels in Figure \ref{fig:ss-distribution}. The dataset is considerably less balanced: \textit{medicine} is by far the most popular field.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/ss-distribution.png}
|
||||
\caption{Label distribution of the Semantic Scholar dataset \cite{Lo2020S2ORCTS}. The \textit{variable} refers to the position of the domain in the list of domains assigned to a paper.}
|
||||
\label{fig:ss-distribution}
|
||||
\end{figure}
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Where should we store this data?} "On my machine" seems like an easy answer. However, if we have a team working with the data or it has intrinsic value, it must be stored in an easy-to-access, potentially redundant way. Serban et al. \cite{serban2020adoption} expressed this need in the following best practice: \textit{Make Data Sets Available on Shared Infrastructure (private or public)}. Meanwhile, wherever data is stored, it should also be versioned to satisfy the next best practice: \textit{Use Versioning for Data, Model, Configurations and Training Scripts}.
|
||||
\end{displayquote}
|
||||
|
||||
MAG needs no further preprocessing if we aim to match SciBERT's setup \cite{beltagy2019scibert}. But since SSC contains a heap of metadata, the relevant parts have to be extracted and preprocessed. In this case, these are the the concatenation of the abstract's text, paper's title and the journal's name along with the paper's domains (there can be multiple domains for a single paper, it is a mulitlabel classification task). Lastly, the non-English entries are discarded because we only expect to process papers in English.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How should we preprocess the data?} These simple processing steps (filter, map, project) are almost always present in the data science life-cycle. For example, cleaning the input text from various HTML, OCR, PDF, or \LaTeX \hskip 0.12cm extraction artifacts is almost always necessary for text analysis. This is captured in the AI best-practices collection under the following category: \textit{Write Reusable Scripts for Data Cleaning and Merging}. Also, the best practice of \textit{Test all Feature Extraction Code} is somewhat applicable: the applied processing steps must not introduce unwanted artifacts.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Methods}
|
||||
|
||||
Since the aim is to classify papers to allow the ScoutinScience platform to select models which have been trained on a matching vocabulary (and domain), it seems reasonable that only considering the distribution (frequencies) of individual terms may be sufficient. To test this hypothesis, a unigram language model (Multinomial Naive Bayes) is constructed and its accuracy is compared with SciBERT's. The former definitely aligns with the advice to \textit{Use The Most Efficient Models}.
|
||||
|
||||
Using the MNB implementation of scikit-learn \cite{pedregosa2011scikit}, it only took a couple of lines to create, hyperparameter-optimise, and test a text classifier. Including data loading and visualisations, it takes 71 LOC to be more precise. \footnote{The code is available at \href{https://github.com/ScoutinScience/great-ai/blob/main/examples/simple-mag/train.ipynb}{github.com/ScoutinScience/great-ai/blob/main/examples/simple-mag/train.ipynb}} This further proves relatively how simple it is to apply existing algorithms. The code can be considered for satisfying the \textit{Automate Hyper-Parameter Optimisation} best-practice, since it also implements an automated hyperparameter sweep.
|
||||
|
||||
The sentences are tokenised into words and vectorised with TF-IDF (with logarithmic term frequency) \cite{buckley1985implementation}, the hyperparameters found via 3-fold cross-validation on the \textit{train} split lead to filtering out tokens which occur in fewer than 5 documents or more than 5\% of the documents.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{What could be automated here?} As discussed in Section \ref{section:accessible-ai}, libraries exposing algorithms and state-of-the-art models can already be considered mature and accessible. In this case, only scikit-learn was utilised, but subjectively, most popular libraries have a similarly easy to use use API. Therefore, I see no urgent need for further action regarding the \textit{experimentation} step of the life-cycle in connection with the AI best practices.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Results \& Discussion}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{figures/confusion-matrix.png}
|
||||
\caption{Confusion matrix of a Naive Bayes classifier on the MAG dataset's sentences. The matrix is normalised column-wise. Notice, how most mistakes happen between semantically similar classes, for instance: \textit{politics} -- \textit{sociology} or \textit{business} -- \textit{economics}.}
|
||||
\label{fig:mag-confusion}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/ss-confusion.png}
|
||||
\caption{Confusion matrix of a Naive Bayes classifier on the SSC dataset's sentences. The matrix is normalised column-wise. Notice, how most mistakes happen between semantically similar classes, for instance: \textit{philosohpy} -- \textit{sociology} or \textit{history} -- \textit{art}.}
|
||||
\label{fig:ss-confusion}
|
||||
\end{figure}
|
||||
|
||||
When this model is applied to the \textit{test} split of MAG, we get the confusion matrix of Figure \ref{fig:mag-confusion}. This Naive Bayes classifier achieves a whopping $0.6795$ F1-score. This is $3.4\%$ better than SciBERT's on the same dataset. Thus, it seems, MNB clearly outperforms SciBERT for this particular use-case: it is not only more accurate, its model is magnitudes smaller, while it is also considerably faster to train (or finetune in the case of SciBERT) and use.
|
||||
|
||||
It is, of course, not entirely surprising that the sophisticated transformer architecture of SciBERT is not necessary for a plain task like this. Apart from phrases, the relation between separate words of a sentence do not carry nearly as much discriminative power as the identity of the terms\footnote{On a similar note, the independence assumption of Naive Bayes is often less wrong than it might seem \cite{hand2001idiot}.}, hence there is little reason for using an attention mechanism. The fact that SciBERT even works in any way on this task is already a testament to its general applicability. Nevertheless, this short experiment has proved that we can safely opt for using MNB for production.
|
||||
|
||||
Since Multinomial Naive Bayes is best at returning a single label and SSC is has multiple labels per datapoint: for evaluation purposes, it is checked whether the returned label is contained in the labels of the ground truth. On this dataset, MNB achieves a significantly lower macro-average F1-score which is 0.49. The weighted-average F1 is 0.61 and the overall accuracy is 62\%. The large difference between the macro and weighted averages come from the unbalanced distribution of the labels, better performance could be achieved by uniformly sampling from each class.
|
||||
|
||||
The lower F1-score is not surprising because there are more than twice as many classes in this dataset, Additionally, the mistakes made are defendable when we look at Figure \ref{fig:ss-confusion}: most of them are between close or related classes.
|
||||
|
||||
\begin{displayquote}
|
||||
This is the usual point where papers conclude: a proof-of-concept/prototype has been built and its performance demonstrated, measured --- and usually --- explained. Nonetheless, in an industrial setting, our problem is far from being solved: it has yet to be deployed.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Deployment}
|
||||
|
||||
First, an inference function needs to be written that can take an input on the fly and calculate a corresponding prediction. Since we aim to follow the best practices, namely: \textit{Explain Results and Decisions to Users} and \textit{Employ Interpretable Models When Possible}, giving an explanation of the results is expected. Fortunately, with our simple model it's easy to determine the most influential weights, thus, words. The last deployment step may be to provide access to our model for others.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How do we provide an interface for the inference function?} We either have an offline or online inference workflow (or both). For the former, we have to provide a way to use it in batch processing; a simple Python function may be adequate for this purpose, though, allowing it to be easily (or automatically) parallelised would make its consumers' DX better. If it is an online-workflow, we must have a service running continuously and accepting input at any time. This can be achieved by a remote procedure call (RPC) interface, or more commonly, a web API. Developers usually refer to these as REST API-s, sometimes, they even follow the conventions of REST. Either ways, we must develop a wrapper over the service in order to make it available for other internal/external consumers.
|
||||
\end{displayquote}
|
||||
|
||||
According to the research on the adoption of best practices, this is where many real-world projects conclude. This happens to be \textbf{the gap}. Believing that solely focusing on the research and experiments is good enough is a fallacy: when following this approach, the deployment step ends up being a rushed attempt of wrapping the \textit{AI} and putting it in the production environment. This is inarguably a deployment. However, it follows very few of the best practices. This can lead to suboptimal real-life performance, lack of accountability, lack of opportunity to improve, and can overall lead to negative societal impact \cite{o2016weapons}.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How could we implement more best practices?} The most notable missing best practices are the lack of automated deployment, automated regression testing, online monitoring, persisting the traces, graceful error-handling, taking feedback on the results (if possible in the use-case), calculating the online accuracy based on the feedback, and retraining the model if necessary using novel data. These all correspond to a best practice.
|
||||
\end{displayquote}
|
||||
|
|
@ -1 +0,0 @@
|
|||
\section{Refactoring with GreatAI}
|
||||
|
|
@ -1,38 +0,0 @@
|
|||
\section{Results}
|
||||
|
||||
\begin{table}
|
||||
\centering
|
||||
\caption{A subset of the AI lifecycle \href{https://se-ml.github.io/practices/}{best practices identified by Serban et al.} \cite{serban2020adoption,serban2021practices} and the level of support GreatAI provides for them. \textit{Full} requires no action from the user, \textit{Partial} requires at least some involvement, while \textit{Slight} provides some useful features but the client is still expected to make a significant effort.}
|
||||
\label{table:best-practices}
|
||||
\begin{tabular}{p{7cm}@{\hskip 0.5cm}c@{\hskip 0.5cm}c}
|
||||
\hline
|
||||
\textbf{Best practice} & \textbf{Implementation} & \textbf{Level of support} \\\hline
|
||||
|
||||
Use Sanity Checks for All External Data Sources & \texttt{great\_ai.parameter} & Partial \\\hline
|
||||
Check that Input Data is Complete, Balanced and Well Distributed & Type-checked input & Slight \\\hline
|
||||
Write Reusable Scripts for Data Cleaning and Merging & \texttt{great\_ai.utilities} & Partial \\\hline
|
||||
Make Data Sets Available on Shared Infrastructure (private or public) & \texttt{great\_ai.large\_file} & Full \\\hline
|
||||
|
||||
Test all Feature Extraction Code & \texttt{great\_ai.utilities} & Partial \\\hline
|
||||
Employ Interpretable Models When Possible & \texttt{great\_ai} & Slight \\\hline
|
||||
Enable Parallel Training Experiments & \texttt{great\_ai.parallel\_map} & Partial \\\hline
|
||||
Continuously Measure Model Quality and Performance & \texttt{great\_ai} & Full \\\hline
|
||||
Use Versioning for Data, Model, Configurations and Training Scripts & \texttt{great\_ai.large\_file} & Full \\\hline
|
||||
|
||||
Run Automated Regression Tests & \texttt{great\_ai} & Full \\\hline
|
||||
Use Continuous Integration & Docker Images \& scripts & Partial \\\hline
|
||||
Use Static Analysis to Check Code Quality & Typed API & Partial \\\hline
|
||||
Assure Application Security & GreatAI is audited & Partial \\\hline
|
||||
|
||||
Automate Model Deployment & Docker Images \& scripts & Partial \\\hline
|
||||
TODO: Enable Shadow Deployment & GreatAI & Full \\\hline
|
||||
Continuously Monitor the Behaviour of Deployed Models & \texttt{great\_ai} & Full \\\hline
|
||||
Enable Automatic Roll Backs for Production Models & Docker Images & Partial \\\hline
|
||||
Log Production Predictions with the Model's Version and Input Data & GreatAI & Full \\\hline
|
||||
|
||||
Explain Results and Decisions to Users & GreatAI & Slight \\\hline
|
||||
\end{tabular}
|
||||
\end{table}
|
||||
|
||||
|
||||
Table \ref{table:best-practices} summarises the implemented best practices.
|
||||
14
docs/thesis/chapters/5_cases/main.tex
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
\chapter{The ScoutinScience Platform} \label{chapter:case}
|
||||
|
||||
The core product of ScoutinScience B.V.\footnote{\href{https://scoutinscience.com/}{scoutinscience.com}} is its Platform\footnote{\href{https://dashboard.scoutinscience.com/}{dashboard.scoutinscience.com}}. The clients are Technology Transfer Offices of Dutch and German universities, government organisations (e.g. Wetsus), and corporations (e.g. Heraeus Group and Ruma Rubber B.V.) who wish to extend the scope of their R\&D activities. ScoutinScience connects to multiple data sources of academic publications and integrates them into a single database. Each new publication is evaluated with a suite of AI components that ultimately determine its technology-transfer potential. Other markers are also extracted that help the users get a quick overview of the authors, topics, and contributions of a given piece of research.
|
||||
|
||||
Each client organisation gets to see a different filtered view of this database ranked by the predicted probability of technology-transfer opportunities being present. The main motivation is to make these business developers' and other professionals' work more efficient by showing them which papers have the highest chance of being considered interesting by them.
|
||||
|
||||
To achieve this, we have a service-based architecture \cite{kleppmann2017designing} on the backend-side --- apart from the data integration, communication, and business logic --- it is made up of services wrapping simpler (phrase-matching, Naïve Bayes) and more sophisticated (conditional random fields, transformer) models. As we will soon see, these can also depend on each other; for instance, based on the predicted scientific domain, a different model can be chosen for scoring certain aspects of papers.
|
||||
|
||||
I was among the first engineers on the team, which has grown considerably in the past two years. While architecting, designing, and integrating more and better models into our software solution, I experienced the same difficulties as were described in Chapter \ref{chapter:background}. The gap between prototypes and production-ready services is larger than it seems, and it is also larger than it should be. This has motivated me to investigate the state-of-the-art, and I have found that it is insufficient in many cases. Since the ScoutinScience Platform is a typical example of applying AI in the industry, it will serve as the real-life case, problem context, and testbed for attempting to design a solution that can hopefully advance the state-of-the-art.
|
||||
|
||||
This chapter describes the process of designing \textit{GreatAI} and how it fits into real-life use cases. First, a simple experiment is presented which investigates a Naïve Bayes classifier's \cite{maron1961automatic} accuracy at predicting the fields of papers. This leads to the implementation of a software service that is deployed to production. Subsequently, as the feature set of the library grows and matures, a more complex component is developed concerning text-summarisation with SciBERT \cite{beltagy2019scibert}. After implementing each case, the insights gained are fed back into the library's design.
|
||||
|
||||
\input{chapters/5_cases/naive-bayes}
|
||||
\input{chapters/5_cases/scibert}
|
||||
201
docs/thesis/chapters/5_cases/naive-bayes.tex
Normal file
|
|
@ -0,0 +1,201 @@
|
|||
\section{Domain classification with Naïve Bayes} \label{section:simple-case}
|
||||
|
||||
Using different models for slight variations of the same problem is commonplace in the industry. For instance, UberEats has a vast hierarchical set of models for every country, region, and city for calculating the estimated time of delivery \cite{li2017scaling}. We have also found that in order to best process an academic publication, knowing its domain is essential. One of the reasons for this can be the wildly different vocabularies of different domains. For example, the term \textit{framework} in computer science almost always refers to a software artifact (usually implying high tech-transfer potential). In contrast, in most other domains, \textit{framework} is used to describe theoretical models that are less central to practical applications. Of course, it is not merely the meaning of the terms but, more importantly, their distribution that varies significantly. Therefore, the topic of this section is to design and develop a domain prediction classifier for academic papers.
|
||||
|
||||
\subsection{Background}
|
||||
|
||||
Fortunately, this is one of the oldest text classification tasks. In fact, Maron introduced the Naïve Bayes classifier in 1961 \cite{maron1961automatic} for precisely this purpose: classifying documents' subjects. However, it is still an active problem when it comes to academic texts, as indicated by Elsevier-funded research carried out by Rivest et al. \cite{rivest2021level}. They created a 176-class classification problem for comparing bibliometric and deep-learning approaches. However, this comparison is made difficult because 44\% of the labels are \textit{assigned suboptimally} in the ground truth dataset.
|
||||
|
||||
Prior work evaluated SciBERT \cite{beltagy2019scibert} --- a BERT \cite{devlin2018bert} model pretrained on academic publications --- on a simpler version of the task in which the domains of sentences\footnote{Sentences are more appropriate units for processing due to SciBERT's maximum token length of 512 which comes from its attention mechanism's quadratic complexity \cite{vaswani2017attention}.} have to be decided\footnote{\href{https://paperswithcode.com/sota/sentence-classification-on-paper-field}{paperswithcode.com/sota/sentence-classification-on-paper-field}}. It achieved an F1-score of $0.6571$ after being pretrained on the Semantic Scholar Corpus (SSC) \cite{Lo2020S2ORCTS} and fine-tuned on the train split of the Microsoft Academic Graph (MAG) dataset \cite{wang2019review}\footnote{SciBERT was applied to a preprocessed version of this dataset, available at: \\ \href{https://github.com/allenai/scibert/tree/master/data/text_classification/mag}{github.com/allenai/scibert/tree/master/data/text\_classification/mag}}. To our knowledge, no other published work exists on this sentence classification task. This may be explained by the task's lack of practical relevance and contrived nature (uniform label distribution), as we will see in the following subsection.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Design note} After getting familiar with the context, it is time to focus on experimenting and developing our domain prediction service. At the same time, the difficulties encountered should be noted and integrated into \textit{GreatAI}'s design.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Data}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.45\linewidth]{figures/mag-distribution.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Class distribution of the MAG \cite{wang2019review} dataset's 84000 sentences in its \textit{train} split.}
|
||||
\label{fig:mag-distribtion}
|
||||
\end{figure}
|
||||
|
||||
Two datasets are considered for the experiments: SciBERT's MAG and the SSC. The former is used to compare the results with SciBERT's, while the latter is utilised for training a model for production purposes because it has 19 labels compared to MAG's 7, and it also contains abstracts instead of just sentences; thus, it is more fitting for our practical use case.
|
||||
|
||||
SciBERT's version of the MAG dataset has 84,000 and 22,300 sentences in its train and test splits, respectively. These are mostly in English and have all punctuation and casing removed. Each sentence is classified as belonging to one of seven fields. Figure \ref{fig:mag-distribtion} shows that the classes have a uniform distribution.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{figures/ss-distribution.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Label distribution of the Semantic Scholar dataset \cite{Lo2020S2ORCTS}. Each publication may be assigned at most three labels.}
|
||||
\label{fig:ss-distribution}
|
||||
\end{figure}
|
||||
|
||||
SSC is much larger: it contains over 80 million abstracts. Having more data certainly helps in sampling the term distribution more accurately; nonetheless, the law of diminishing returns applies, especially when using simple models. Therefore, the data are randomly downsampled to give us a more manageable couple of hundreds of megabytes of abstracts. We can see the distribution of class labels in Figure \ref{fig:ss-distribution}. The dataset is considerably less balanced: \textit{medicine} is by far the most voluminous field.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Where should we store this data?} ``On my machine'' seems like an easy answer. However, if we have a team working with the data or it has intrinsic value, it must be stored in an easy-to-access, potentially redundant way. Serban et al. \cite{serban2020adoption} expressed this need in the following best practice: \textit{Make Data Sets Available on Shared Infrastructure (private or public)}. Meanwhile, wherever data is stored, it should also be versioned to satisfy the next best practice: \textit{Use Versioning for Data, Model, Configurations, and Training Scripts}.
|
||||
\end{displayquote}
|
||||
|
||||
MAG needs no further preprocessing if we aim to match SciBERT's setup \cite{beltagy2019scibert}. However, since SSC contains heaps of metadata, the relevant parts have to be extracted and preprocessed. In this case, these are the concatenation of the abstract's text and the paper's title along with the paper's domains (there can be multiple domains for a single paper: it is a multi-label classification task). Lastly, the non-English entries are discarded because we only expect to process papers in English.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How should we preprocess the data?} These simple processing steps (filter, map, project) are almost always present in the data science lifecycle. For example, cleaning the input text from various HTML, OCR, PDF, or \LaTeX \hskip 0.12cm extraction artifacts is normally necessary for text analysis. This is captured in the \href{https://se-ml.github.io/practices}{AI best practices collection} under the following category: \textit{Write Reusable Scripts for Data Cleaning and Merging}. Also, the best practice of \textit{Test all Feature Extraction Code} is somewhat applicable: the applied processing steps must not introduce unwanted side-effects.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Methods}
|
||||
|
||||
Our aims are twofold: (1) to evaluate a sentence classification model on MAG and compare it with the prior art; and (2) to retrain and apply this model for classifying publication metadata (including abstracts). This would allow the ScoutinScience Platform to select an appropriate processing pipeline which has been trained on a matching vocabulary (and domain) for each publication.
|
||||
|
||||
It seems reasonable that only considering the distribution (frequencies) of individual terms may be sufficient. For testing this hypothesis, a unigram language model --- Multinomial Naïve Bayes (MNB) --- is constructed, and its accuracy is compared with SciBERT's. The former definitely aligns with the advice to \textit{Use The Most Efficient Models}. Using the MNB implementation of scikit-learn \cite{pedregosa2011scikit}, it only took 71 lines of code to create, hyperparameter optimise, and test a text classifier.\footnote{The code is available at \href{https://great-ai.scoutinscience.com/tutorial/}{great-ai.scoutinscience.com/tutorial}.} This further proves how simple it is to use standard packages. The code can be considered for satisfying the \textit{Automate Hyper-Parameter Optimisation} best practice since it also implements an automated hyperparameter sweep.
|
||||
|
||||
The sentences are tokenised into words and vectorised with TF-IDF (with logarithmic term frequency) \cite{buckley1985implementation}, the hyperparameters found via 10-fold cross-validation on the \textit{train} split lead to filtering out tokens which occur in fewer than five documents or more than 5\% of the documents.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{What could be automated here?} As discussed in Section \ref{section:accessible-ai}, libraries exposing algorithms and even SOTA models can already be considered mature and accessible. In this case, only scikit-learn was utilised, but subjectively, most popular libraries have a similarly easy-to-use API. Therefore, there seems to be no urgent need for further action regarding the \textit{experimentation} step of the lifecycle in connection with the AI best practices.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Results \& Discussion}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.9\linewidth]{figures/mag-confusion.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Confusion matrix of a Naïve Bayes classifier on the MAG dataset's sentences. The matrix is normalised column-wise. Notice, how most mistakes happen between semantically similar classes, for instance: \textit{politics} -- \textit{sociology} or \textit{business} -- \textit{economics}.}
|
||||
\label{fig:mag-confusion}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/ss-confusion.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Confusion matrix of a Naïve Bayes classifier on the SSC dataset's sentences. The matrix is normalised column-wise. Notice, how most mistakes happen between semantically similar classes, for instance: \textit{philosohpy} -- \textit{sociology} or \textit{history} -- \textit{art}.}
|
||||
\label{fig:ss-confusion}
|
||||
\end{figure}
|
||||
|
||||
When this model is applied to the \textit{test} split of MAG, we get the confusion matrix of Figure \ref{fig:mag-confusion}. This Naïve Bayes classifier achieves a whopping $0.6795$ F1 score, which is $2.3\%$ more than SciBERT's on the same dataset. Thus, it seems that MNB clearly outperforms SciBERT for this particular use case: it is not only more accurate, but its model is magnitudes smaller. At the same time, it is also considerably faster to train (or fine-tune in the case of SciBERT) and use (its running time is in the order of milliseconds per publication). It also has no upper limit on the input length. Thus, this experiment validates choosing MNB for the task over SciBERT.
|
||||
|
||||
It is, of course, not entirely surprising that the sophisticated transformer architecture of SciBERT is not necessary for a straightforward task like this. Apart from phrases, the relations between separate words of a sentence do not carry nearly as much discriminative power as the identity of the terms \cite{hand2001idiot}; hence, there is little reason for using an attention mechanism. The fact that SciBERT even works in any way on this task is already a testament to its general applicability. Nevertheless, this short experiment has proved that we can safely opt for using MNB for production.
|
||||
|
||||
Since Multinomial Naïve Bayes is best at returning a single label and SSC has multiple labels per datapoint: for evaluation purposes, it is checked whether the returned label is contained in the labels of the ground truth. On this dataset, MNB achieves a lower macro-average than on MAG, with an F1-score of 0.59.\footnote{The code for this is available at \href{https://great-ai.scoutinscience.com/examples/simple/deploy}{great-ai.scoutinscience.com/examples/simple/deploy}.} The weighted-average F1 is 0.70, and the overall accuracy is also 70\%. The substantial difference between the macro and weighted averages comes from the unbalanced distribution of the labels. The lower F1-score is not surprising because this dataset has more than twice as many classes. Additionally, the mistakes made are defensible when we look at Figure \ref{fig:ss-confusion}: most of them are between related domains.
|
||||
|
||||
\begin{displayquote}
|
||||
This is the usual point where papers conclude: a proof-of-concept/prototype has been built, and its performance demonstrated, measured --- and usually --- explained. Nonetheless, in an industrial setting, our problem is far from being solved: it has yet to be deployed.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Deployment}
|
||||
|
||||
First, an inference function needs to be written to take input on the fly and calculate a corresponding prediction. Since we aim to follow the best practices \textit{Explain Results and Decisions to Users} and \textit{Employ Interpretable Models When Possible}, explaining the results is expected. Fortunately, with our simple model, it is easy to determine the most influential weights, thus, words. The explanations are derived by taking the top five tokens from the input text ranked by their feature weights. The last deployment step is to provide access to our model for others.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How do we provide an interface for the inference function?} We either have an offline or online inference workflow (or both). For the former, we have to provide a way to use it in batch processing; a simple Python function may be adequate for this purpose, though allowing it to be easily (or automatically) parallelised would improve its consumers' DX. If it is an online workflow, we must have a service running continuously and accepting input at any time. This can be achieved by a remote procedure call (RPC) interface or, more commonly, a web API. Developers usually refer to these as REST APIs, and sometimes, they even follow the conventions of REST. Either way, we must develop a wrapper over the service to make it available to other internal/external consumers.
|
||||
\end{displayquote}
|
||||
|
||||
According to the body of research on the adoption of best practices, this is where many real-world projects conclude. This also happens to be \textbf{the gap}. Believing that solely focusing on the research and experiments is good enough is a fallacy: when following this approach, the deployment step ends up being a rushed attempt of wrapping the \textit{AI} and putting it in the production environment. This is, inarguably, a deployment. However, it likely follows very few of the best practices, which can lead to suboptimal real-life performance, lack of accountability, lack of opportunity to improve, and possibly an overall negative societal impact.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{How could we implement more best practices?} The most notable missing software/operations features are the lack of automated deployment, automated regression testing, online monitoring, persisting prediction traces, graceful error-handling, taking feedback on the results (if possible in the use case), calculating the online accuracy based on the feedback, and retraining the model if necessary using novel data. These all correspond to best practices.
|
||||
\end{displayquote}
|
||||
|
||||
\section{Bridging the gap with GreatAI}
|
||||
|
||||
Let us first revisit the library's scope for clarification. As concluded in Section \ref{section:scope}, \textit{GreatAI} should ease the \textit{transition} step between prototypes and production-ready deployments. However, this leaves open the question of what constitutes this step. There are cross-cutting concerns; for example, feature extraction is implemented and used in the training phase, but it is also deployed alongside the model. The robustness criterion has to be met by this procedure even though its implementation is only in focus in the earlier stages of the project. Since having an untested function deployed into production can have severe repercussions, we can conclude that assuring its correctness lies within the scope of \textit{GreatAI}. Henceforth, cross-cutting concerns should be covered.
|
||||
|
||||
This section briefly explores how the problems raised can be solved using \textit{GreatAI} and the API it provides to best fit the needs of its users. We first focus on the aspects of data, then we discuss the utility of helper functions, and lastly, the automated wrapping of services.
|
||||
|
||||
\subsection{Handling data} \label{subsection:large-file}
|
||||
|
||||
The obstacles coming from the intertwined nature of different models are widely recognised \cite{haakman2021ai,amershi2019software,sculley2015hidden}. This can lead to non-monotonic error propagation, meaning that improvements in one part of the system might decrease the overall system quality \cite{amershi2019software}. The importance of schema versioning in an environment of rapidly changing models and transformations is highlighted for a specific use case in \cite{van2017versioning} and more generally by the \textit{Use Versioning for Data, Model, Configurations and Training Scripts} best practice. These emphasise the requirement for versioning models and, in general, data.
|
||||
|
||||
We must address two data storage needs: training data and trained models. Proper version control is one of the most basic expectations for commercial codebases. Based on developer surveys, it is likely that our code is already tracked under Git and synchronised with GitHub\footnote{\href{https://octoverse.github.com/\#lets-look-back-at-the-code-and-communities-built-on-git-hub-this-year}{octoverse.github.com/\#lets-look-back-at-the-code-and-communities-built-on-git-hub-this-year}}. Therefore, using Git Large File Storage (LFS) might seem intriguing. However, it is a paid (and surprisingly expensive) service of GitHub, especially when we factor in the expected sizes of the models and training data with the fact that the only way to remove files counting towards our quota is to delete the entire repository\footnote{\href{https://docs.github.com/en/repositories/working-with-files/managing-large-files/removing-files-from-git-large-file-storage\#git-lfs-objects-in-your-repository}{docs.github.com/en/repositories/working-with-files/managing-large-files/removing-files-from-git-large-file-storage}}.
|
||||
|
||||
An open-source tool, the Data Version Control (DVC)\footnote{\href{https://dvc.org/}{dvc.org}} provides a nearly perfect alternative. It comes with a command-line interface (CLI) inspired by Git's and can be integrated with several backend storage servers. Its only downside is, of course, that it is one more tool that increases the complexity of the project and the initial setup time. If this is an acceptable price to pay, then we highly recommend opting for DVC. Nevertheless, if this may prohibit a team\footnote{As was the case with MLFlow tracking in an ING team described in Section \ref{section:industry}.} from properly handling data according to the best practices, we present a simpler solution.
|
||||
|
||||
The complexity of an API can be decreased by relying on its users' preexisting knowledge, and known patterns \cite{hermans2021programmer,ousterhout2018philosophy}. Therefore, we can reuse familiar APIs, such as the \texttt{open()} method from Python. Therefore, a method is proposed which provides the same interface; however, the backing storage can be a mixture of local disk space, S3-compatible storage, MongoDB, or any other storage backend. It provides a superset of \texttt{open()}'s interface\footnote{\href{https://docs.python.org/3/library/functions.html\#open}{docs.python.org/3/library/functions.html\#open}}: the same parameters can be used with it resulting in similar observed behaviour. The expected features: versioning, progress bars, caching, garbage collecting the cache, and automatically deleting old remote versions are all present and come with recommended --- but easy to see and change --- configuration.
|
||||
|
||||
Easing development is not merely about automating everything but also about making the code easy to change (which is the \textit{Viscosity} dimension of CDCB). Going from opening a local file on the disk with the built-in open method, to opening a file from S3 is as easy as changing \texttt{open(`file.txt', `w')} to \texttt{LargeFileS3(`file.txt', `w')}. In the case of the latter, an additional \texttt{version} keyword argument can also be given to lock ourselves in using a specific version which can be desirable in the case of models.
|
||||
|
||||
\subsection{Utilities}
|
||||
|
||||
It is easy to notice multiple recurring tasks when it comes to processing text. Cleaning it from various extraction artifacts and normalising characters are some of the most common. But splitting sentences, language tagging, and robustly lemmatising are also often recurring tasks. Because having reusable and tested feature extraction code covers two best practices, it seems straightforward that a utility module could be created for this, which could be extensively tested through unit testing.
|
||||
|
||||
This is exactly the motivation behind \texttt{great\_ai.utilities}. Extra care has to be taken not to overfit these utilities on the cases considered in this chapter; however, we believe these are versatile enough to be helpful in many text-related contexts. A conclusive answer to this assumption will be found during the interviews.
|
||||
|
||||
Implementing the unit tests uncovered multiple edge cases and even runtime errors; hence, the merit of \textit{Test all Feature Extraction Code} best practice is unequivocal. There is one more best practice that could be partially covered here, especially because its solution also helps both during batch inference but also at training/feature extraction time: \textit{Enable Parallel Training Experiments}.
|
||||
|
||||
A function called \texttt{parallel\_map()} is also implemented which closely mimics the API of the built-in Python function: \texttt{map}. Furthermore, it exemplifies how even a close to trivial function can improve the DX by magnitudes. Rooted in the global interpreter lock (GIL)\footnote{\href{https://wiki.python.org/moin/GlobalInterpreterLock}{wiki.python.org/moin/GlobalInterpreterLock}} of CPython, in almost all cases, multi-threading does not lead to higher performance of CPU-bound tasks. For this purpose, multiprocessing has to be used. Fortunately, the standard \texttt{multiprocessing} library has a great API. However, doing a parallel mapping task with a progress bar still takes about a dozen lines. This can deter people (at least me) from taking advantage of more than just a single CPU core during exploratory experimentation. With \texttt{parallel\_map()}, this challenge becomes a one-liner routine task.
|
||||
|
||||
\subsection{Deployment approach}
|
||||
|
||||
Some of the expectations one might have for data-intensive (such as AI) software are similar to that for software in general. These are also captured by the best practices: \textit{Use Continuous Integration}, \textit{Automate Model Deployment}, and \textit{Enable Automatic Roll Backs for Production Model} to name a few. It is important to notice that these have already been solved by software engineering, more specifically, by the DevOps paradigm \cite{leite2019survey}.
|
||||
In line with the findings of John et al. \cite{john2020architecting} on the SOTA of AI deployments, we suggest wrapping the applications in a format more compatible with existing DevOps toolkits. Instead of reinventing the wheel, we should rely on more established DevOps best practices for implementing the SE4ML deployment best practices. Besides, organisations are expected to have their deployment processes for classical applications; thus, allowing them to reuse those for AI applications seems to be the most convenient approach.
|
||||
|
||||
Based on personal experiences, three types of software artifacts are identified (in the context of Python) for which a wide range of established practices exist. WSGI server\footnote{\href{https://peps.python.org/pep-3333/}{peps.python.org/pep-3333}} compatible applications, executable scripts, and Docker Images\footnote{\href{https://docs.docker.com/registry/spec/manifest-v2-2/}{docs.docker.com/registry/spec/manifest-v2-2}}. To achieve this, \textit{GreatAI} provides a compatibility layer between simple Python inference functions and all the abovementioned common artifacts. Taking functions as input for the first step also satisfies the requirement to be \textbf{General}. Nevertheless, to also allow customisation, additional configuration, metadata, and behavioural specification can be given as well.
|
||||
|
||||
\begin{listing}[h]
|
||||
\begin{minted}[
|
||||
frame=lines,
|
||||
framesep=2mm,
|
||||
baselinestretch=1,
|
||||
linenos
|
||||
]{python}
|
||||
from great_ai import GreatAI
|
||||
|
||||
@GreatAI.create
|
||||
def greeter(name: str) -> str:
|
||||
return f"Hello {name}!"
|
||||
\end{minted}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Simplest example using \textit{GreatAI} for wrapping a function. In practice, \texttt{greeter} could be the inference function of an ML model.}
|
||||
\label{listing:hello-world}
|
||||
\end{listing}
|
||||
|
||||
The main advantage of the wrapping approach is that it does not require any input from the clients (by default). We opted for a decorator \cite{gamma1995design}, which lets users wrap their function by adding a single additional line of code as shown in Listing \ref{listing:hello-world}. After which, the created WSGI application can be accessed through the \texttt{greeter.app} property where \texttt{greeter} is the identifier of the user-defined function. A CLI script (\texttt{great-ai}), along with a \texttt{Dockerfile} are also provided to cover the other two deployment artifacts.
|
||||
|
||||
\begin{listing}[h]
|
||||
\begin{minted}[
|
||||
frame=lines,
|
||||
framesep=2mm,
|
||||
baselinestretch=1,
|
||||
linenos
|
||||
]{python}
|
||||
from great_ai import save_model, GreatAI, parameter, use_model, log_metric
|
||||
|
||||
# this could have been called in another script
|
||||
save_model('special_number', 405)
|
||||
|
||||
@GreatAI.create
|
||||
@parameter('positive_number', validate=lambda n: n > 0)
|
||||
@use_model('special_number', version='latest', model_kwarg_name='special')
|
||||
def add_to_special_number(positive_number: int, special: int) -> int:
|
||||
"""This docstring will be parsed and exported as documentation."""
|
||||
log_metric('log directly into the Trace', positive_number ** 2)
|
||||
return special + positive_number
|
||||
|
||||
assert add_number(12).output == 417
|
||||
\end{minted}
|
||||
\captionsetup{width=.9\linewidth,position=top,skip=-20pt}
|
||||
\caption{A simple \textit{GreatAI} service with behavioural customisations.}
|
||||
\label{listing:complex}
|
||||
\end{listing}
|
||||
|
||||
\newpage
|
||||
|
||||
Coincidentally, deployment best practices can be easily implemented in this wrapper layer. In the first iteration, these are input validation, persisting traces, online monitoring, and generating documentation. Input validation may be used to \textit{Check that Input Data is Complete, Balanced and Well Distributed}. Traces are essential for both \textit{Log Production Predictions with the Model's Version and Input Data} and \textit{Provide Audit Trails}. However, traces can also indirectly help \textbf{Robustness} because even production systems cannot be expected to be perfect. Saving and letting the users filter on encountered errors while allowing them to correlate those with the inputs producing them is imperative for facilitating debugging. Lastly, monitoring and documentation correspond with helping best practices: \textit{Continuously Monitor the Behaviour of Deployed Models} and \textit{Communicate, Align, and Collaborate With Others} respectively.
|
||||
|
||||
To allow customising the service's behaviour to fit different use cases, the default configurations can be overridden by calling some library functions. An example of this can be seen in Listing \ref{listing:complex}, while more details of the semantics can be found in the documentation\footnote{\href{https://great-ai.scoutinscience.com/how-to-guides/create-service/}{great-ai.scoutinscience.com/how-to-guides/create-service}}.
|
||||
|
||||
\subsection{Summary}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.8\linewidth]{figures/dashboard-domains.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Screenshot of the domain prediction integrated into the ScoutinScience Dashboard, where it is used as a filtering option.}
|
||||
\label{fig:dashboard-domains}
|
||||
\end{figure}
|
||||
|
||||
After implementing some features of the library, it can already be used for deploying the previously discussed domain prediction model. In this case, online prediction is expected; hence, the REST API-based deployment is chosen, which is created by \texttt{@GreatAI.create} and packaged into a Docker image. This image can be instantiated by the company's existing DevOps pipeline and cloud infrastructure. In the end, users can see one more tag in the header section of publication evaluations, where they can also see the explanation behind the model's decision as demonstrated in Figure \ref{fig:dashboard-domains}. Let us now explore how the framework fares in a more complex case.
|
||||
168
docs/thesis/chapters/5_cases/scibert.tex
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
\newpage
|
||||
\section{Text summarisation with SciBERT} \label{section:complex-case}
|
||||
|
||||
The ScoutinScience Dashboard contains a full-page evaluation view for academic publications. On this, the known metadata, historical trends about the paper's topics, social media mentions, a PDF viewer showing the document, and other augmentation tools are displayed. One of these is the \textit{Highlights} section, which aims to summarise the paper from a technology-transfer perspective.
|
||||
|
||||
The current approach uses a simple heuristic based on a set of phrases selected by business developers and extended with the help of a word2vec model \cite{mikolov2013efficient}. The user feedback deemed this implementation slightly helpful but inadequate for providing an accurate overview. Thus, this is the baseline we attempt to improve on in this section.
|
||||
|
||||
\begin{displayquote}
|
||||
Compared with Section \ref{section:simple-case}, this time around, the toolset of \textit{GreatAI} is available at our disposal. Hopefully, this will streamline the development and --- especially --- the deployment. Given its arguably higher complexity, the experiment falls closer to industrial use cases and hence, can give more accurate feedback on how to further improve the API.
|
||||
\end{displayquote}
|
||||
|
||||
\subsection{Background}
|
||||
|
||||
Automatic text summarisation (ATS) is also one of the earliest established tasks of text analysis and boasts numerous promising results \cite{el2021automatic}. Text summarisation is usually divided into extractive and abstractive approaches. Even though the latter can lead to more fluent summaries, it is also prone to hallucinate content that is unfaithful to the input \cite{maynez2020faithfulness}. For this reason, extractive techniques are preferred in this case.
|
||||
|
||||
Our problem requires generating a special type of summary: it must only concern a single aspect (tech-transfer) of the document. Aspect-based text summarisation has also seen some progress over the last decades \cite{berkovsky2008aspect,hayashi2021wikiasp}, but these methods require concretely defined topics. Unfortunately, \textit{tech-transfer potential} is anything but a clear topic definition.
|
||||
|
||||
Numerous discussions and interviews with business developers over the last two years made it clear that there is no universally agreed-on definition of it. At least all of them agree that they know it when they see it. Additionally, most of them agree that they can confidently make a decision on the granularity of sentences. This gives rise to an obvious idea: show the experts something they can annotate. Because experts' time is valuable, and relevant sentences are few and far between, extra care needs to be taken to improve the ratio of positive examples in the dataset. The research of Iwatsuki Kenichi on formulaic expressions (FEs) \cite{iwatsuki2020evaluation,iwatsuki2021extraction,iwatsuki2021communicative,iwatsuki2022extraction} provides a promising direction to do so.
|
||||
|
||||
A formulaic expression is a phrase with zero or more ``slots'' which, when filled appropriately, leads to expressing a certain intent. In the context of scientific text, an example\footnote{Taken from the ground truth data available at \href{https://github.com/Alab-NII/FECFevalDataset/blob/master/human_evaluation/background.tsv}{github.com/Alab-NII/FECFevalDataset}.} could be: \texttt{it was not until * that}. The asterisk can be substituted with multiple terms, and the intention of this expression is (likely) to describe the \textit{History of the related topics}. Iwatsuki et al. identified a set of 39 intentions, compiled a manually labelled dataset \cite{iwatsuki2020evaluation}, and developed multiple approaches for automatically extracting and classifying formulaic expressions in large corpora \cite{iwatsuki2021communicative,iwatsuki2022extraction}.
|
||||
|
||||
\subsection{Methods}
|
||||
|
||||
In order to compile a new dataset, experts are asked to judge sentences that passed an \textit{intention check}. This pooling approach is commonly used in information retrieval \cite{schutze2008introduction}. The filtering is expected to sieve out sentences that are probably not relevant from a technology-transfer perspective using Iwatsuki's formulaic expression intention classes. Subsequently, relevance judgements --- in the form of \textit{interesting} or \textit{not interesting} labels --- are gathered for the remaining sentences. Figure \ref{fig:annotator} shows an example of the annotation task. Our method turns the extractive summarisation into a binary classification task for which a SciBERT model \cite{beltagy2019scibert} can be fine-tuned. Ultimately, the summaries are derived from sentences selected by the classifier trained on the experts' annotations.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=0.75\linewidth]{figures/annotator.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{The annotator GUI showing a single sentence and the two labels that can be assigned based on its relevance to technology-transfer.}
|
||||
\label{fig:annotator}
|
||||
\end{figure}
|
||||
|
||||
We have to note two possible shortcomings of this setup: firstly, the FE intentions are assumed to be strongly correlated with the sought-after \textit{tech-transfer opportunities} aspect. This may or may not be true. Secondly, only the individual relevance of the sentences is considered instead of the overall relevance (utility) of the summary. Nonetheless, we expect that stemming from the length of the documents, and the sparseness of the selected sentences, any combination of them is likely to have low redundancy.
|
||||
|
||||
\subsection{Results}
|
||||
|
||||
For the first iteration, 1500 sentences were selected for two experts to annotate in a binary fashion according to strict guidelines. Afterwards, for measuring the interrater agreement, we calculated Cohen's kappa \cite{cohen1960coefficient} as shown in Equation \ref{equation:kappa}, which turned out to be \textbf{0.43} for the two annotators. This happens to be just above the lower end of \textit{moderate agreement}. Even though the original quality ranges are sometimes criticised for being too relaxed for the medical domain \cite{mchugh2012interrater}, some leniency is acceptable for many NLP tasks due to their subjectiveness. Regardless, in the case of summarisation, Verberne et al. \cite{verberne2018creating} argue that reasonable end-quality can be reached even when the interrater agreement is relatively low. The ground truth is determined by taking the logical disjunction of the annotations. This is reasonable because the annotators have dissimilar backgrounds and likely judged slightly different aspects of the sentences.
|
||||
|
||||
\begin{equation} \label{equation:kappa}
|
||||
\kappa_{agreement} \equiv \frac{p_{observed} - p_{expected}}{1 - p_{expected}} = 1 - \frac{1 - p_{observed}}{1 - p_{expected}}
|
||||
\end{equation}
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Reproducibility} Reproducible experiments are generally preferred. It is easy to forget to set some seed values and, for example, end up with different data points in the test-train splits during training and validation in a Continuous Integration (CI) pipeline, thus, data leakage. For facilitating reproducibility, it would be useful to reset the seeds of each imported library's random number generators (RNGs) when \textit{GreatAI} is configured. Thus, a feature has been added to detect and reset RNGs of installed and imported libraries. This certainly will not solve the reproducibility crisis \cite{hutson2018artificial} on its own; however, in some cases, it can result in one fewer step to miss.
|
||||
\end{displayquote}
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{figures/scibert-confusion.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Confusion matrix of the fine-tuned SciBERT model on the \textit{summary candidate sentences} dataset.}
|
||||
\label{fig:scibert-confusion}
|
||||
\end{figure}
|
||||
|
||||
The next step is fine-tuning SciBERT with the help of Hugging Face \texttt{transformers} \cite{wolf2019huggingface}. The data are divided into training and test splits with a ratio of 4:1. A validation split, used for early stopping, is also derived from the train split. The objective function is the F1-score of the positive class, and the early stopping patience is five epochs. The learning rate is $5 \times 10^{-5}$ and AdamW \cite{loshchilov2017decoupled} is used for optimisation with a weight decay of 0.05. The code can be found in the documentation\footnote{\href{https://great-ai.scoutinscience.com/examples/scibert/train/}{great-ai.scoutinscience.com/examples/scibert/train}}, it is surprisingly slightly shorter than the code of Section \ref{section:simple-case}.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Utility of LargeFiles} For the purposes of the documentation, the fine-tuning was conducted in the Google Colab online environment, which is excellent for providing anyone with GPU time for free. However, notebook environments are ephemeral, resulting in the need to manually upload and download all relevant data whenever a new virtual machine instance is granted. The \texttt{LargeFile} implementation alleviated this problem by automatically handling the uploads and downloads. Of course, first, backwards compatibility had to be solved for Python 3.7, the only available environment in Colab.
|
||||
\end{displayquote}
|
||||
|
||||
\begin{table}[ht]
|
||||
\centering
|
||||
\begin{threeparttable}
|
||||
\caption{Accuracty metrics of the fine-tuned SciBERT model on the \textit{summary candidate sentences} dataset.}
|
||||
\label{table:scibert-pr}
|
||||
\setlength{\tabcolsep}{0.75em} % for the horizontal padding
|
||||
{\renewcommand{\arraystretch}{1.2} % for the vertical padding
|
||||
\begin{tabular}{|l|r|r|r|}
|
||||
\hline
|
||||
{} & \textbf{Precision} & \textbf{Recall} & \textbf{Support} \\\hline
|
||||
\textsc{non-relevant} & 0.93 & 0.83 & 191 \\\hline
|
||||
\textsc{relevant} & 0.73 & 0.88 & 109 \\\hline
|
||||
\end{tabular}}
|
||||
\end{threeparttable}
|
||||
\end{table}
|
||||
|
||||
Let us check how well the selected sentences correspond with the tech-transfer potential. Users and in-house experts can rate publications (from a tech-transfer perspective) by assigning them to one of four categories: \texttt{A}, \texttt{B}, \texttt{C}, and \texttt{D} with \texttt{A} being the most and \texttt{D} the least promising. This feedback is stored and used for analytic and training purposes. Since both the feedback grade and the relevant (summary candidate) sentences are supposed to reflect the same aspect of papers, we can reasonably expect some correlation between the grades and relevant sentence counts.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
\includegraphics[width=0.9\linewidth]{figures/highlights-histograms.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Distribution of mean predicted summary candidate sentence counts (refered to as \textit{highlights}) in 4 categories. Category \texttt{A} corresponds to the most, while \texttt{D} to the least interesting papers based on mean user feedback. The sample size is 1406 (\texttt{D}=715, \texttt{C}=309, \texttt{B}=198, \texttt{A}=184). The histograms are on the same scale but shifted vertically according to the grade to which they correspond.}
|
||||
\label{fig:histograms}
|
||||
\end{figure}
|
||||
|
||||
The best validation results were achieved after eight epochs which is slightly more than expected but is presumably due to the weight decay. The confusion matrix on the test split can be seen in Figure \ref{fig:scibert-confusion}, and the per class accuracy metrics in Table \ref{table:scibert-pr}. Despite the task's subjective definition, SciBERT achieves good quality, indicated by an F1-score of \textbf{0.80}.
|
||||
|
||||
Figure \ref{fig:histograms} shows the ratio of summary candidate sentences as predicted by the fine-tuned model in 4 categories (grades) of papers. This dataset does not overlap with the training data; hence, the results come solely from the model's ability to generalise. It is interesting to see that the Spearman's rank correlation coefficient \cite{spearman1961proof} between the normalised ``highlights'' counts and the ratings of papers is \textbf{0.4784} and is statistically significant ($P = 5.4 \times 10^{-74}$). This proves the presence of a monotonic association. For context, the correlation between the grades and the number of sentences chosen by the baseline approach is 0.06597 ($P = 0.03$). We can conclude that the classifier's output is indicative of publications' tech-transfer potential.
|
||||
|
||||
\begin{figure}[t]
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/dashboard-highlights.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{The tech-transfer summary of an academic publication (\cite{bruns2022deep}). The titles and sentences can be clicked to navigate the paper on the right. Meanwhile, some explanation is provided by the highlighted words, the opacity of which corresponds to their attention weights.}
|
||||
\label{fig:dashboard-highlights}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Deployment}
|
||||
|
||||
To implement the summarisation, at most, the top 7 selected sentences are chosen as ranked by their log probabilities. They are subsequently reordered according to their position in the text. As a quasi-explanation, the tokens' attention scores are visualised and overlaid on the highlighted sentences. The \textit{i}-th token's visualised attention comes from summing up the attention weights of each of the last layer's heads between the \texttt{[CLS]} and the \textit{i}-th token. To improve the end-user experience, a high-pass filter and a stop-word list are applied to the scores to avoid highlighting the syntax-related tokens (punctuation, determiners). The service --- after being integrated into the Dashboard --- can be seen in Figure \ref{fig:dashboard-highlights}.
|
||||
|
||||
\begin{displayquote}
|
||||
\textbf{Design inspiration} In order to get insights into their inner workings, Hugging Face models can be given \texttt{output\_attentions=True} in their constructor, which results in a new property becoming accessible on the results for querying the attentions. The only issue with it is that it is a 5-dimensional matrix which makes exploring and understanding it non-obvious. In short, it has very low \textit{Discoveribility}. For example, the attention weights for the GUI are calculated with this expression:
|
||||
\begin{minted}[
|
||||
baselinestretch=1,
|
||||
]{python}
|
||||
np.sum(result.attentions[-1].numpy()[0], axis=0)[0][1:-1]
|
||||
\end{minted}
|
||||
Even though the operation is conceptually simple, because of the opaque data structure, this is anything but obvious to comprehend. Therefore, it is clear that this needs to be avoided in our library design; it has to have an explicit and discoverable API that can be achieved using type hints, descriptive property names, and docstrings.
|
||||
\end{displayquote}
|
||||
|
||||
\section{Improving GreatAI}
|
||||
|
||||
After having solved two problems by implementing two standalone services and integrating them into an existing ecosystem while relying on \textit{GreatAI} as a primary tool, a wide variety of insights have been gained. In the next couple of subsections, the extra features and design decisions that were motivated by the \textit{Highlights (summarisation) service} are presented. After which, the final surface of the API is described, which will be evaluated by its relation to the deployment best practices \cite{serban2020adoption,serban2021practices,john2020architecting,john2020ai} in the next chapter.
|
||||
|
||||
\subsection{Caching}
|
||||
|
||||
Sustainability is an increasingly crucial concern of ethical AI \cite{van2021sustainable}. Without discussing the pros and cons of the green computing movement \cite{10.1145/1400181.1400186}, we can still agree that computing time should not be wasted. To this end, caching the results of expensive operations has to be considered in any AI deployment. In this case, the \textit{Highlights service} is often called multiple times from different other services with the same parameters. With each operation taking up to a couple of seconds, implementing caching can lead to vastly faster response times and an overall more socially conscious deployment.
|
||||
|
||||
\subsection{Revisiting \texttt{parallel\_map}}
|
||||
|
||||
Even though most inference functions are CPU-bound (or GPU-bound), it turns out that sometimes they involve IO, especially when relying on the results of other remote models. This means a significant performance improvement can be achieved by implementing some inference functions asynchronously \cite{tilkov2010node}. Thus, \textit{GreatAI} also has to support decorating both regular (synchronous) and asynchronous functions. One notable consequence is that the batch processing feature must also be compatible with \texttt{async} inference functions. Batch processing is still a helpful feature since it is likely that async inference functions are both IO (remote calls) and CPU (local evaluation) constrained at the same time. Thus, they can benefit from multi-core parallelisation.
|
||||
|
||||
However, the standard library's \texttt{multiprocessing}, the third party \texttt{multiprocess} \cite{mckerns2012building}, and, another popular library, \texttt{joblib}\footnote{\href{https://joblib.readthedocs.io/en/latest/}{joblib.readthedocs.io/en/latest}} all lack the support for efficiently parallelising async functions. For this reason, \texttt{parallel\_map} was reimplemented to create an event-loop in each worker process to keep the efficiency of non-blocking IO while also providing parallelisation for the CPU-bound sections of code.
|
||||
|
||||
\subsection{Human integration}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{figures/greatai-header.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{The header of the automatically generated dashboard of the service from Section \ref{section:simple-case}. A generated documentation is shown on the left, while the histogram of response times is rendered on the right. The current configuration is prominently displayed on the bottom.}
|
||||
\label{fig:greatai-header}
|
||||
\end{figure}
|
||||
|
||||
Even though the REST API of \textit{GreatAI} services exposes all necessary features\footnote{Such as providing feedback per prediction, complexly filtering and sorting traces, create-read-update-delete (CRUD) operations for the feedbacks and traces, accessing live monitoring info (current configuration, versions, cache statistics), etc.} which are great for programmatic access, these are not ideal for direct human consumption. To ease the introduction of \textit{GreatAI} services, a rudimentary dashboard is --- optionally --- generated. The dashboard's main features can be observed in Figures \ref{fig:greatai-header}, \ref{fig:greatai-table}, and \ref{fig:greatai-parallel}. The diagrams and filterable/sortable table are interconnected and are automatically updated; the reactive behaviour is provided by the Dash framework \cite{shammamah_hossain-proc-scipy-2019}.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{figures/greatai-table.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{A dynamically updating, tabular view of traces matching a user-defined filter. Useful for exploring historical predictions or debugging the cause of exceptions (which are also searchable). The filters set in the table affect the other diagrams of the dashboard.}
|
||||
\label{fig:greatai-table}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{figures/greatai-parallel.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{A parallel coordinates view of the traces displayed in the table above. Adding new axes is as easy as calling \texttt{log\_metric} inside the inference function.}
|
||||
\label{fig:greatai-parallel}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Programmatic integration}
|
||||
|
||||
Apart from supporting \texttt{async} calls, a couple more steps can be taken to help integrate any service with a \textit{GreatAI} deployment. This is implemented by the \texttt{call\_remote\_great\_ai} function which hides the networking required to call a \textit{GreatAI} instance's REST API. It takes care of validation, automatic retries, serialisation, and deserialisation. It comes with the added benefit of encouraging decoupled services because the friction of integrating them is no longer noticeable, which is beneficial for human collaboration \cite{hasselbring2002component}.
|
||||
|
||||
Additionally, a REST API is generated with its accompanying OpenAPI schema\footnote{\href{https://swagger.io/specification}{swagger.io/specification}} and served with a \href{https://swagger.io/}{Swagger} template. It also contains metadata about the function, for instance, its docstring, version, and version of its registered models concatenated in order to be SemVer\footnote{\href{https://semver.org/}{semver.org}} compatible. These can be seen in Figure \ref{fig:greatai-api}. This, combined with a \texttt{/version} HTTP endpoint for programmatic access and validation of the service's metadata, proved to be valuable features when integrating the \textit{Highlights service} into ScoutinScience's service-based architecture.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{figures/greatai-api.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Documentation of the automatically scaffolded REST API of a \textit{GreatAI} service. Notice, how its version string includes its registered models in a SemVer compliant way: \texttt{0.0.1+small-domain-prediction-v11}.}
|
||||
\label{fig:greatai-api}
|
||||
\end{figure}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
\chapter{Interviews} \label{chapter:interviews}
|
||||
|
||||
\section{Threats to validity}
|
||||
199
docs/thesis/chapters/6_results.tex
Normal file
|
|
@ -0,0 +1,199 @@
|
|||
\chapter{Results \& discussion} \label{chapter:interviews}
|
||||
|
||||
It should not be surprising that neither data scientists nor software engineers can be replaced by software libraries. However, a non-negligible subset of their processes can be partially or fully automated, especially when it comes to packaging and deploying AI/ML services. The objective was to design a library with an API that finds the balance between being simple enough to adopt without friction yet useful enough to be adopted. Simplicity is subjective and will be discussed separately in Section \ref{section:interviews}. For now, let us look at the utility of \textit{GreatAI}.
|
||||
|
||||
\section{Features} \label{section:features}
|
||||
|
||||
For answering \textbf{RQ3} --- \textit{To what extent can \textit{GreatAI} automatically implement AI deployment best practices?} --- a comparison is presented in the following, demonstrating a subset of best practices that can be implemented/scaffolded/configured with little user input; hence, through a simple and streamlined API. Tables \ref{table:best-practices-1} and \ref{table:best-practices-2} summarise the implemented best practices in the context of methods found by prior surveys of scientific and grey literature \cite{serban2020adoption,serban2021practices,john2020architecting}.
|
||||
|
||||
In order to show an accurately nuanced representation, a \textit{Level of support} is determined for each best practice on a scale of \textit{Partially supported}, \textit{Supported}, and \textit{Fully automated}. For instance, \textit{Use static analysis to check code quality} from Table \ref{table:best-practices-1} is \textit{Supported} because the entire public interface of \textit{GreatAI} is correctly typed (including generics and asynchronous coroutines) and compatible with \href{https://mypy.readthedocs.io/en/stable/index.html#}{\texttt{mypy}} and \href{https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance}{\texttt{Pylance}}. This means that when \textit{GreatAI} is used in any Python project, various tools can be applied to statically check the soundness of the project's integration with \textit{GreatAI}. However, if the library's user does not use type hints in their code and it contains a more complex control flow, it can only be partially type-checked. In short, this best practice is supported, and a considerable part of it is already implemented by \textit{GreatAI}, but clients should still keep in mind that they might also need to make an effort to implement it fully.
|
||||
|
||||
This is not the case for \textit{Log production predictions with the model's version and input data} because, by default, it is automatically implemented when calling \texttt{@GreatAI.create}. Users can still specify the exact expected behaviour, e.g., where to store traces, additional metrics to log, or disabling the logging of sensitive input. Nevertheless, the best practice is already implemented reasonably well without input from the library's user.
|
||||
|
||||
\begin{table}
|
||||
\centering
|
||||
\begin{threeparttable}
|
||||
\caption{A subset of AI lifecycle best practices and the level of support \textit{GreatAI} provides for them. The level of support is one of \textit{Fully automated} (\checkmark\checkmark), which means that no action is required from the user, \textit{Supported} (\checkmark) only automates the reasonably automatable aspects, while \textit{Partially supported} ($\sim$) provides some useful features, but the client is expected to build on top of these.}
|
||||
|
||||
\label{table:best-practices-1}
|
||||
{\renewcommand{\arraystretch}{1.2} % for the vertical padding
|
||||
\begin{tabular}{P{7cm}@{\hskip 0.5cm}l@{\hskip 0cm}c} \hline
|
||||
|
||||
\textbf{Best practice} & \textbf{Implementation} & \textbf{Support} \\\hline
|
||||
Use sanity checks for all external data sources\textsuperscript{1} & \texttt{@parameter} & \checkmark \\\hline
|
||||
Check that input data is complete, balanced, and well-distributed\textsuperscript{1} & \texttt{@parameter} & $\sim$ \\\hline
|
||||
Write reusable scripts for data cleaning and merging (for NLP)\textsuperscript{1} & \texttt{utilities} & \checkmark\checkmark \\\hline
|
||||
Make datasets available on shared infrastructure\textsuperscript{1} & \texttt{large\_file} & \checkmark\checkmark \\\hline
|
||||
Test all feature extraction code (for NLP)\textsuperscript{1} & \texttt{utilities} & \checkmark\checkmark \\\hline
|
||||
Employ interpretable models when possible\textsuperscript{1} & \texttt{views} & $\sim$ \\\hline
|
||||
Continuously measure model quality and performance\textsuperscript{1, 2} & Feedback API & \checkmark \\\hline
|
||||
Use versioning for data, model, configurations and training scripts\textsuperscript{1, 2} & \texttt{@use\_model}, versioning & \checkmark\checkmark \\\hline
|
||||
Run automated regression tests\textsuperscript{1} & \texttt{*\_ground\_truth} & \checkmark \\\hline
|
||||
Use continuous integration\textsuperscript{1} & Docker Image, WSGI application & \checkmark \\\hline
|
||||
Use static analysis to check code quality\textsuperscript{1} & Fully typed API with generics & \checkmark \\\hline
|
||||
Assure application security\textsuperscript{1} & Code is automatically audited & $\sim$ \\\hline
|
||||
Automate model deployment, enable shadow deployment\textsuperscript{1, 2} & Docker Image \& scripts & \checkmark \\\hline
|
||||
Enable automatic rollbacks for production models\textsuperscript{1, 2} & Docker Image \& scripts & $\sim$ \\\hline
|
||||
Continuously monitor the behaviour of deployed models\textsuperscript{1, 2} & Dashboard, metrics endpoints & \checkmark\checkmark \\\hline
|
||||
Log production predictions with the model's version and input data\textsuperscript{1} & \texttt{@GreatAI.create} & \checkmark\checkmark \\\hline
|
||||
|
||||
\end{tabular}}
|
||||
\begin{tablenotes}
|
||||
\item[1] SE4ML best practices from Table 2 of \cite{serban2020adoption}, and Table 1 of \cite{serban2021practices}.
|
||||
\item[2] Reported state-of-the-art and state-of-practice practices from Tables 2, 3, and 4 of \cite{john2020architecting}.
|
||||
\end{tablenotes}
|
||||
\end{threeparttable}
|
||||
\end{table}
|
||||
|
||||
\begin{table}
|
||||
\centering
|
||||
\begin{threeparttable}
|
||||
\caption{A subset of AI lifecycle best practices and the level of support \textit{GreatAI} provides for them. The level of support is one of \textit{Fully automated} (\checkmark\checkmark), which means that no action is required from the user, \textit{Supported} ($\checkmark$) only automates the reasonably automatable aspects, while \textit{Partially supported} ($\sim$) provides some useful features but the client is expected to build on top of these.}
|
||||
|
||||
\label{table:best-practices-2}
|
||||
{\renewcommand{\arraystretch}{1.2} % for the vertical padding
|
||||
\begin{tabular}{P{7cm}@{\hskip 0.5cm}l@{\hskip 0cm}c} \hline
|
||||
|
||||
\textbf{Best practice} & \textbf{Implementation} & \textbf{Support} \\\hline
|
||||
Execute validation techniques: error rates and cross-validation\textsuperscript{2} & \texttt{*\_ground\_truth} & \checkmark \\\hline
|
||||
% Track models, dependencies, experiments, versions\textsuperscript{2} & \texttt{great\_ai.use\_model}, Dashboard & \checkmark\checkmark \\\hline
|
||||
Store models in a single format for ease of use\textsuperscript{2} & \texttt{save\_model} & \checkmark\checkmark \\\hline
|
||||
Rewrite from data analysis to industrial development language\textsuperscript{2} & Jupyter Notebook deployment & \checkmark \\\hline
|
||||
Equip with web interface, package image, provide REST API\textsuperscript{2} & \texttt{@GreatAI.create} & \checkmark\checkmark \\\hline
|
||||
Provide simple API for serving batch and real-time requests\textsuperscript{2} & \texttt{@GreatAI.create} & \checkmark\checkmark \\\hline
|
||||
For reproducibility, use standard runtime and configuration files\textsuperscript{2} & \texttt{utilities.ConfigFile}, Dockerfile & \checkmark \\\hline
|
||||
Integration with existing data infrastructure\textsuperscript{2} & GridFS, S3 support & \checkmark\checkmark \\\hline
|
||||
Select ML solution fully integrated with databases\textsuperscript{2} & MongoDB, PostgreSQL support & \checkmark\checkmark \\\hline
|
||||
Querying, visualising and understanding metrics and event logging\textsuperscript{2} & Dashboard, Traces API & \checkmark\checkmark \\\hline
|
||||
% Monitor status and performance\textsuperscript{1, 2} & Dashboard, Status (metadata) API & \checkmark\checkmark \\\hline
|
||||
Measure accuracy of deployed model to ensure data drifts are noticed\textsuperscript{2} & Feedback API & \checkmark \\\hline
|
||||
Apply automation to trigger model retraining\textsuperscript{2} & Feedback API & $\sim$ \\\hline
|
||||
% Employ Agile, DevOps-style workflows, allow automatic rollback\textsuperscript{2} & Docker Image, WSGI application & \checkmark \\\hline
|
||||
% Deploy different versions of same application\textsuperscript{2} & Complex versioning support & $\sim$ \\\hline
|
||||
Allow experimentation with the inference code\textsuperscript{3} & Development mode \& auto-reload & \checkmark\checkmark \\\hline
|
||||
Keep the model and its documentation together\textsuperscript{3} & Dashboard and Swagger & \checkmark\checkmark \\\hline
|
||||
Parallelise feature extraction\textsuperscript{3} & \texttt{parallel\_map} & \checkmark\checkmark \\\hline
|
||||
Cache predictions\textsuperscript{3} & \texttt{@GreatAI.create} & \checkmark\checkmark \\\hline
|
||||
Allow robustly composing inference functions\textsuperscript{3} & All decorators support async & \checkmark\checkmark \\\hline
|
||||
Implement standard schemas for common prediction tasks\textsuperscript{3} & \texttt{views} & \checkmark \\\hline
|
||||
|
||||
\end{tabular}}
|
||||
\begin{tablenotes}
|
||||
\item[2] Reported state-of-the-art and state-of-practice practices from Tables 2, 3, and 4 of \cite{john2020architecting}.
|
||||
\item[3] Additional software engineering best practices applicable to AI/ML deployments encountered while designing and using \textit{GreatAI}.
|
||||
\end{tablenotes}
|
||||
\end{threeparttable}
|
||||
\end{table}
|
||||
|
||||
\FloatBarrier
|
||||
|
||||
In Table \ref{table:best-practices-2}, we added six additional best practices, which are generally well-known software engineering considerations that are also applicable to AI/ML deployments. These had not explicitly made it into the aforementioned surveys; however, according to the insights gained from Sections \ref{section:simple-case} and \ref{section:complex-case}, implementing them has a positive effect on deployment quality. In future research, attention could be given to their level of industry-wide adoption and quantitative utility.
|
||||
|
||||
Quantifying the number of implemented best practices would be misleading since their scope and importance cover a wide range; furthermore, there is some overlap between the different studies and even within the studies. However, it is still clear that a large number of best practices (17) can be given a \textit{Fully automated} implementation by \textit{GreatAI}'s design, and many others (16) can be augmented by the library. This proves the feasibility of designing simple APIs using the techniques of Chapter \ref{chapter:design} for decreasing the complexity of correctly deploying AI services while still implementing various best practices (\textbf{RQ2}).
|
||||
|
||||
\section{Interviews} \label{section:interviews}
|
||||
|
||||
One of the central takeaways of Section \ref{section:existing} is that, for example, Seldon Core is useful for implementing or helping to implement most of the best practices. Regardless, it also has an initial threshold that must be surmounted before implementing even a single one. According to the adoption rate surveys, this may discourage a large portion of practitioners from using it or other similar frameworks. The presented solution offers a different mix of features: the initial threshold is virtually non-existent; hence, best practices can be applied immediately. But at the same time, it only covers a more limited range of practices.
|
||||
|
||||
Our hypothesis is that the latter approach aligns better with the expectations of professionals. To verify this, we conducted a series of interviews with the cooperation of ten industry practitioners with varying levels of Software Engineering (SE) and Data Science (DS) experience. In this section, the question of generalisability (\textbf{RQ4}) is investigated using the interview methodology described in Section \ref{section:interview-setup}. The participants were gathered through the recommendations of my friends and colleagues. All of the final interviewees have had at least some expertise in both DS (with a median of 2.5 years) and SE (with a median of 2 years).
|
||||
|
||||
\subsection{Best practices survey} \label{subsection:best-practices-survey-results}
|
||||
|
||||
The practitioners were first asked to fill out a questionnaire about their latest AI/ML project involving deployment. This point-in-time measurement (shown in Appendix \ref{appendix:practices}) served as a baseline for the deployment quality they are used to. Analysing the results show that the amount of software engineering experience has a moderately strong correlation ($r_{Pearson} = 0.67$ with $p = 0.0033$) with the overall number and extent of implemented deployment best practices. This is illustrated in Figure \ref{fig:adoption}. Interestingly but unsurprisingly, there is no similar statistically significant relationship regarding the amount of data science experience.
|
||||
|
||||
The y-axis of Figure \ref{fig:adoption} is calculated by discarding the \textit{Not applicable} answers and projecting the 5-point Likert scale to a range from 0 to 1, which is subsequently averaged over all questions. The overall mean adoption rate/extent is just above 0.5, which equates to the \textit{Neither agree nor disagree} label. These data are in line with the findings of Serban et al. \cite{serban2020adoption}.
|
||||
|
||||
Because the survey's 15 questions were compiled from the \textit{Fully automated} rows of Tables \ref{table:best-practices-1} and \ref{table:best-practices-2}, that means that when using \textit{GreatAI}, they are all implemented automatically. Consequently, the adoption rate/extent is doubled immediately just by wrapping the inference function with \texttt{@GreatAI.create}: this is the added value of \textit{GreatAI}\footnote{As explained earlier, measuring quality as a function of best practice count would be dubious. Thus, the achieved magnitude of the doubling is irrelevant; however, the direction of change is not.}. Moreover, this provides further evidence for answering \textbf{RQ3} showing the extent of automatically implemented practices over non-\textit{GreatAI} deployments.
|
||||
|
||||
\begin{figure}
|
||||
\centering
|
||||
\includegraphics[width=0.6\linewidth]{figures/best-practices.png}
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Best practices adoption rate as a function of Software Engineering (SE) and Data Science (DS) experience. SE experience is shown on the horizontal axis, while the point sizes denote the practitioners' experience in DS. The correlation between the axes is significant ($r_{Pearson} = 0.67$ with $p = 0.0033$).}
|
||||
\label{fig:adoption}
|
||||
\end{figure}
|
||||
|
||||
\subsection{Technology acceptance}
|
||||
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\captionsetup{width=.9\linewidth}
|
||||
\caption{Technology acceptance model survey (presented in Appendix \ref{appendix:questions}, sample size = 10) results per variable. The input values range from 1 to 7.}
|
||||
\label{table:tam}
|
||||
{\renewcommand{\arraystretch}{1.1} % for the vertical padding
|
||||
\begin{tabular}{|r|l|l|l|} \hline
|
||||
& \textbf{Perceived ease of use} & \textbf{Perceived utility} & \textbf{Intention to use} \\\hline
|
||||
\textbf{Median} & 5.8 & 6.4 & 6.3 \\\hline
|
||||
\textbf{Mean} & 5.5 & 6.1 & 6.0 \\\hline
|
||||
\textbf{Standard deviation} & 1.0 & 0.9 & 1.3 \\\hline
|
||||
\textbf{Cronbach's alpha} & 0.77 & 0.88 & 0.95 \\\hline
|
||||
\end{tabular}}
|
||||
\end{table}
|
||||
|
||||
The participants filled out a form (shown in Appendix \ref{appendix:questions}) after finishing their first deployment with \textit{GreatAI} to provide data for creating the technology acceptance model of the problem context. The survey contained ten questions from three categories, which could be rated on a 7-point Likert scale. The summary of the answers is presented in Table \ref{table:tam}. The high Cronbach's alpha values indicate strong internal consistency \cite{nunnally1994psychometric} for each TAM dimension; thus, averaging the responses per category is semantically meaningful.
|
||||
|
||||
Following the methodology of \cite{cruz2019catalog}, the connections between the Perceived Utility (PU), Perceived Ease Of Use (PEOU), and Intention To Use (ITU) dimensions of TAM were analysed. Two statistically significant ($P \leq 0.05$) correlations were uncovered: between PU and ITU ($r_{Pearson} = 0.81$ with $p = 0.0048$); and PEOU and ITU ($r_{Pearson} = 0.80$ with $p = 0.0068$). Learning from the findings of prior case studies, it is reasonable to believe that both the \textit{perceived utility} and the \textit{perceived ease of use} play an equally important role in influencing professionals' \textit{intention to use} the deployment framework.
|
||||
|
||||
The assessment of \textit{ease of use} lags behind the rest, but it is still quite high. It may be possible that PEOU would go up with further use. Nevertheless, the high \textit{perceived utility} implies that \textit{GreatAI} shows its value early on. This, combined with the correlations uncovered within the context's technology acceptance model, validates the hypothesis that focusing on good API design is just as necessary as providing practical features.
|
||||
|
||||
\subsection{Task solving \& exit interviews}
|
||||
|
||||
In order to give qualitative depth to the previously presented quantitative results, it is time to discuss the main segment of the interviews. The participants' backgrounds covered a vast and fascinating cross-section of industrial AI/ML. The financial sector was represented by a researcher working on market prediction models for the Hungarian State Treasury and two people building an upcoming digital bank's core services. Image processing contexts were illustrated by professionals predicting Sun activity at the European Space Agency and different ones creating pose-recognition at a startup for people with disabilities using 3D cameras. Moreover, investigating companies' AI use as part of due diligence processes and intrusion detection from network packet traces are just some of the other core activities the interviewees had been doing recently.
|
||||
|
||||
Stemming from this diversity, these semi-structured interviews could be expected to provide valuable insights into the generalisability of \textit{GreatAI}. The methodology of Section \ref{section:interview-setup} was followed by applying reflective journaling and thematic analysis. After labelling each aspect of the feedback, and two iterations of merging redundant or related topics, we ended up with three overarching themes: \textit{Functionality}, \textit{API}, and \textit{Responsibility to adopt}. As we will soon see, these correspond to the \textit{perceived utility}, \textit{perceived ease of use}, and \textit{intention to use} components of TAM fairly well.
|
||||
|
||||
\paragraph{Functionality} The library's feature-set was complimented during most interviews, with one participant noting that, although the overall number of features is relatively small, most of them are utilised in most cases. Similarly, the \texttt{utilities} submodule was appreciated for helping greatly in the interview task, but non-NLP researchers noted its likely inadequacy for their area. Still, they would like to see ``bundle'' or ``toolbox''-style modules for their fields because it would save them from a lot of copy-pasting.
|
||||
|
||||
The effortless parallel feature extraction and large file handling support were highlighted multiple times for the reason that the particular interviewees had not encountered other libraries providing these features. Other concrete features, such as the searchable \textit{exceptions} column in the Dashboard's table and the \textit{feedback} mechanism, were also popular. One professional highlighted the latter for coercing users to consider a human-in-the-loop approach which was said to be often expected in modern systems.
|
||||
|
||||
When reflecting on the framework from a bird's eye view, the generality and extensibility of the API were emphasised. As explained by a senior engineer, this is mainly because once you commit to using it, it is important not to find yourself at a dead end for a specific use case forcing you to look for a different library. However, two participants also noted that for complete generality, \texttt{MATLAB} support would be necessary. Regarding non-functional features, private hosting (especially in banking and government), open-source auditability, and good scalability (by means of an external database) were the top subjects of praise.
|
||||
|
||||
\paragraph{API} Regarding the surface through which clients interact with the library, the feedback is also positive but more nuanced. Many participants liked that the functions' behaviour is easy to guess from their names. The decorator syntax caused minor confusion but consulting the documentation solved the issues in all three cases. The CLI app \texttt{great-ai} was appreciated for having a close to trivial signature; the participant noted that she strives to use as few CLI commands as feasible. Surprisingly, even the practitioners with more data science background appreciated the Docker support. Nonetheless, one expert had a feature request for a configuration GUI because his colleagues are used to handling MATLAB App Designer applications.
|
||||
|
||||
The recurring theme of the discussions focused on the question of ``\textit{How simple is too simple?}''. The argument is that an API cannot be simpler than the domain in which it exists. More precisely, it can only be simpler at the cost of losing transparency. Let us take the example of saving models using \texttt{save\_model()}. If a project is set up correctly, it either has an initial \texttt{configure()} call to the storage provider backend, or it has an appropriately named credentials file in the project's root, for instance, \texttt{s3.ini} or \texttt{mongo.ini}. Once set up, it is trivial to use as long as we do not divert from the happy path. However, if an issue arises, such as an upgrade or migration of MongoDB, debugging the application is non-trivial for its lack of transparency.
|
||||
|
||||
In other words, we could say that the average (cognitive) complexity is low while the worst-case is as high --- if not higher --- than without using \texttt{save\_model()}. This proved to be somewhat controversial. However, ultimately, optimising the happy path of the AI/ML development lifecycle was deemed worthwhile by the participants in most cases. With the argument that the majority of the time spent during a project is spent on this path anyway. However, this raises the question of who exactly are the target users of \textit{GreatAI} and who will fix arising issues?
|
||||
|
||||
\paragraph{Responsibility to adopt} Let us first look at some insightful anecdotes that surfaced during the interviews. Especially in more research-oriented environments, production deployment pipelines can be of questionable robustness. This phenomenon was demonstrated by one account of a simple single-machine deployment pipeline: it is an interplay of \texttt{cron} jobs calling a series of shell and MATLAB scripts resembling a Rube Goldberg machine. But connecting a couple of Google Colab accounts to a GitHub repository and Weights\&Biases\footnote{\href{https://wandb.ai/site}{wandb.ai}} to implement parallel model training can also be found in the wild.
|
||||
|
||||
Moreover, various research companies were mentioned that for multiple years used to or still have an R\&D department consisting solely of data scientists. In one extreme case, the staff was described as more than 30 data scientists and 0 other technical employees. In such a setup, it is unreasonable to expect even professionals to have the capabilities and focus to set up the required foundation for handling all best practices. All but one interviewee verified this assumption. They also referred to their previous projects, which usually required many researchers and experts from various fields, and too often, software engineers had not been prioritised to be included.
|
||||
|
||||
Doing software engineering without software engineers is difficult. \textit{GreatAI} is not a viable replacement for any well-trained expert, though it is still better than nothing. During the interviews, we realised that the likely underlying reason for not employing AI engineers or software engineers as part of AI/ML projects is a lack of awareness. This was theorised by some and demonstrated by six participants who had, even though followed some, not explicitly sought out information on AI deployment best practices. Thus, raising awareness --- especially by presenting a value proposition, e.g. lower maintenance costs and better long-term quality --- might be crucial for improving AI deployments in general. Verifying this hypothesis could be a worthwhile direction for future research.
|
||||
|
||||
During the larger discussions, \textit{GreatAI} was deemed appropriate for raising awareness since it showcases how even a simple library is able to implement a lot of best practices. Additionally, it was noted that it could also be considered for one-person projects where --- by definition --- it is admissible to have no SE expert on the ``team''. To further help such cases, integrating a one-click Heroku\footnote{\href{https://www.heroku.com/}{heroku.com}} app deployment was also recommended to simplify the entire last portion of the lifecycle.
|
||||
|
||||
\subsection{Discussion of interviews}
|
||||
|
||||
The overall takeaway from this is that most features were well-received, and the high mean value of \textit{perceived utility} is credible. The criticism of being NLP-centric is also justified: the initial scope of the proof-of-principle framework was limited to this domain. Nonetheless, learning the experts' opinion that they wish to have a similarly specific solution to their problem contexts is reassuring because it proves that the API is not only generalisable but is expected to be generalised. At the same time, it is crucial to admit that no one-size-fits-all solution can exist for such a diverse domain. Therefore, allowing customisability and easy extension of the system must remain central design questions.
|
||||
|
||||
Regarding the API's level of abstraction, we have to agree with the experts that the problem of deployment cannot be ``magically'' solved by a trivial API. However, solving deployment problems can be streamlined, at least in simpler cases. At the same time, the complex ones can be left to the professionals with relevant knowledge. This parallels the AI-libraries that have inspired \textit{GreatAI}. For instance, Hugging Face \texttt{transformers} streamlines fine-tuning and applying SOTA models, but it does not provide any facilities to help you create the next SOTA architecture because that is a vastly more complex task that most users are not expected to tackle.
|
||||
|
||||
In order to reach its goal of improving best practice adoption, \textit{GreatAI} can help raise awareness by presenting a verifiable value proposition, i.e. a couple of lines of code can already result in more maintainable, robust, high-quality deployments. This might prompt users or technical decision-makers to invest more in software engineering in AI/ML projects. Additionally, it can help the effectiveness of AI/software engineers by handling the grunt work of implementing some best practices, leaving them with more resources to focus on the complex and creative aspects of \textit{GREAT} deployments.
|
||||
|
||||
In summary, the answer to \textit{How suitable is the design of GreatAI for helping to apply best practices in other contexts?} (\textbf{RQ4}) is --- unsurprisingly --- subjective. Combining the high value of \textit{intention to use} from Table \ref{table:tam}, the generally positive feedback regarding the library's added value, and the numerous feature requests for fitting it to specific needs, we conclude that there is some chance of suitability for generalisability. The existence of this potential is already exciting and presents an opportunity for experimenting with building on the design of \textit{GreatAI}.
|
||||
|
||||
\subsection{Threats to validity}
|
||||
|
||||
Two potential threats to the validity of the experiments and their results are identified. Firstly, the claimed utility of the framework derived in Subsection \ref{subsection:best-practices-survey-results} does not take into account the practical significance of the implemented features and, therefore, may be subject to bias. However, the \textit{perceived utility} evaluations indicate that the participating engineers and scientists identify practical value in the features of \textit{GreatAI}. Nevertheless, in the future, we intend to extend the range of implemented best practices, which would in turn, give higher confidence about the achievable quantitative improvement through using the library.
|
||||
|
||||
Secondly, the survey answers and, in general, the interviewees may be subject to bias. The small sample size of practitioners can reasonably lead to some groups being over- or under-represented. The presence of selection bias is also plausible. These could be mitigated by gathering more data in future research. Coming from the exploratory nature of this analysis, many insights could be gained from the collected data. However, for confidently generalising the results, more data are needed.
|
||||
|
||||
\section{Future work}
|
||||
|
||||
The primary purpose of the library was to serve as a proxy through which its design decisions could be tested and evaluated in their practical context. For this reason, its design aimed to be a proof-of-principle for validating hypotheses and answering research questions. After successfully doing that, it has been turned into a practical software library suitable for production-use\footnote{Available at \href{https://pypi.org/project/great-ai/}{pypi.org/project/great-ai} and \href{https://hub.docker.com/repository/docker/schmelczera/great-ai}{hub.docker.com/repository/docker/schmelczera/great-ai}.}.
|
||||
|
||||
The library's main limitations come from its bias toward NLP deployments. This is not unreasonable given the design's exploratory nature and the context of the case studies. Nevertheless, future work must focus on introducing and balancing support for many more fields' deployments. Although \textit{GreatAI} has already proved its utility, it has also shown that generalising and extending its functionality would be worthwhile. Therefore, many potential improvements are presented below.
|
||||
|
||||
\subsection{More ML domains and modalities}
|
||||
|
||||
The cases presented in Chapter \ref{chapter:case} revolved around NLP. This, of course, heavily influenced the design process. The two most notable effects can be found in the REST API's \texttt{/predict} endpoint and some \texttt{utilities} functions. The former is streamlined to accept JSON-compatible data (which caters to textual and tabular data), while the latter gives robust feature extraction support only for textual input. However, in practice, sound, image, and video are also widely taken as input. Furthermore, with the rise of multimodal models \cite{gao2020survey}, even different combinations of them may be simultaneously taken as input.
|
||||
|
||||
Supporting the easy, direct upload of larger non-JSON files --- e.g. by saving them to S3 and showing a preview of them on the Dashboard's traces table --- and extending \texttt{utilities} to handle multimedia formats should be sufficient for counteracting the NLP bias. Hence, widely expanding the scope of applicability of \textit{GreatAI}. As we have seen in Section \ref{section:architecture}, the architecture is otherwise adequately general; therefore, incremental extensions can be applied.
|
||||
|
||||
\subsection{More best practices}
|
||||
|
||||
In order to greatly simplify its API, each \textit{GreatAI} Trace is a single document with a well-defined schema that clients can also extend by calling \texttt{log\_metric}. MongoDB provides a convenient (and popular) method for persisting such documents; however, if there is some existing database in the environment, storing Traces in that can be favourable. PostgreSQL \cite{momjian2001postgresql} is a popular choice, and it also features good JSON document support. Hence, introducing first-class integration for PostgreSQL could benefit some clients.
|
||||
|
||||
Data-intensive services can fall into three broad categories: online systems, batch processing, and stream processing (near-teal-time systems) \cite{kleppmann2017designing}. As of yet, \textit{GreatAI} only provides streamlined support for the first two. Thus, developer experience could be improved by providing simple, direct integration with popular message queues/protocols, such as \href{https://kafka.apache.org/}{Apache Kafka} \cite{kreps2011kafka}, \href{https://aws.amazon.com/sqs/}{AWS SQS} \cite{garfinkel2007evaluation}, or \href{https://www.amqp.org/}{AMQP} \cite{vinoski2006advanced}. Moreover, some metrics of \textit{GreatAI}, such as the cache statistics, versions, and derived data from traces, can already be conveniently queried from its REST API. Nevertheless, adding support for the de facto standard metric gathering tool, Prometheus\footnote{\href{https://prometheus.io/}{prometheus.io}}, could save the library's users from one more integration step.
|
||||
|
||||
The common theme among the opportunities mentioned above is that they could be implemented reasonably well without any user input, which aligns with the library's philosophy. Of course, the open-source nature of \textit{GreatAI} already allows anyone to provide support for a wide range of integrations. Additionally, the scope could be reasonably extended, i.e. more practices could be incorporated by including more criteria next to the \textit{GREAT} ones.
|
||||
|
|
@ -1,7 +1,15 @@
|
|||
\chapter{Conclusion} \label{chapter:conclusion}
|
||||
\chapter{Conclusion} \label{chapter:conclusion}
|
||||
|
||||
% even if you already implemented these solutions by hand, you no longer have to -> you have more time -> you can spend that time implementing more advanced best practices
|
||||
Concerned by the asymmetry between the industry's adoption of accessible AI/ML-libraries and existing solutions for their robust deployment, we investigated this phenomenon's causes and potential resolution. When looking at various recent case studies, a recurring theme was revealed: \textit{transitioning} from prototypes to production-ready AI/ML deployments is a source of adversity for small and large enterprises alike. Even though several frameworks and platforms exist for facilitating this step, surveys on the execution of best practices continue to expose the industry's shortcomings. This signals that existing libraries are underutilised, which may lead to poor deployments that underperform or develop issues that go unnoticed and might inflict societal harm.
|
||||
|
||||
\section{Future work}
|
||||
We hypothesised that presenting a library which implements best practices and is also optimised for ease of adoption could help increase the overall quality of industrial AI/ML deployments. To test this, we designed and implemented a framework based on the principles of cognitive science and the prior art of software design. Subsequently, we tested and refined the design in an iterative process. First, we developed and deployed a model for classifying the domains of academic publications. Then, we fine-tuned and deployed a SciBERT model for generating publications' technology-transfer summaries. \textit{GreatAI} had been proven helpful; therefore, after feeding back the insights gained into its design, we turned it into an open-source library. Furthermore, \textit{GreatAI} has been successfully integrated into every production deployment of ScoutinScience since then and receives thousands of monthly downloads.
|
||||
|
||||
\section{Concluding remarks}
|
||||
During the refinement of the framework, six previously unaddressed AI/ML deployment best practices were identified. Including these, the framework fully implements 17 best practices while it provides support for another 16. We validated the value provided by implementing or helping to implement these practices through interviews with ten industry professionals from various subfields.
|
||||
|
||||
The interview participants completed two questionnaires, the results of one of which indicated that using \textit{GreatAI} in an example task increased the number of implemented best practices, on average, by 49\% compared with their latest project. We also calculated the technology acceptance model of the context; a significantly strong correlation was measured between the \textit{perceived ease of use}, the \textit{perceived utility} and the \textit{intention to use} dimensions. Overall, proving that ease of use is just as important as core functionality when adopting AI deployment frameworks.
|
||||
|
||||
The open-ended exit interviews revealed that value can be derived from the library even in its current form and that the API's design has the opportunity to generalise to other fields of industrial AI/ML applications. However, they also highlighted that adoption issues do not necessarily come from a lack of willingness but a lack of awareness. Even if the returns achievable from good deployments are well worth the investment. Nevertheless, this value proposition needs to be conveyed and proved to data science professionals and technical decision-makers; and \textit{GreatAI} might just be the ideal candidate for doing that.
|
||||
|
||||
\textit{GreatAI} may have the potential to bridge the gap between data science and software engineering. Stemming from the bidirectional nature of bridges, we can look at the framework from two perspectives: for professionals closer to the field of data science, it provides an automatic scaffolding of software facilities that are required for deploying, monitoring, and iterating on their models. For software engineers, it highlights the necessary steps needed for robust and improvable deployments. At the same time, it also saves them from the menial work of manually implementing these constructs. While most importantly, it proves that increasing the adoption rate of AI/ML deployment best practices is feasible by designing narrower and deeper APIs.
|
||||
|
||||
Good deployments benefit all of us. Accordingly, continued research into the means of good deployments remains crucial. However, next to that --- as the presented results have shown --- better deployments can also be achieved by facilitating the \textit{transition} step of the AI lifecycle with a focus on adoptability. Having automated implementations, even if for just the straightforward best practices, leaves professionals additional time to tackle the more complex deployment challenges and fewer opportunities to miss critical steps. Overall, resulting in more general, robust, end-to-end, automated, and trustworthy AI deployments.
|
||||
|
|
|
|||
52
docs/thesis/chapters/appendix.tex
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
\appendix
|
||||
|
||||
\chapter{Best practices assessment} \label{appendix:practices}
|
||||
|
||||
Similarly to the approach of \cite{serban2020adoption}, participants are asked about their team's level of adoption of AI/ML deployment best practices. The questions come from the entries of Tables \ref{table:best-practices-1} and \ref{table:best-practices-2} where \textit{GreatAI} was determined to provide a support level of \textit{Fully automated}.
|
||||
|
||||
\textbf{How well did the previous AI deployment that you collaborated on implement the following best practices?} \textit{Each statement can be rated on a 5-point Likert scale or as ``Not applicable''.}
|
||||
|
||||
\begin{enumerate}
|
||||
\item Write reusable scripts for data cleaning and merging
|
||||
\item Make datasets available on shared infrastructure
|
||||
\item Use versioning for data, model, configurations and training scripts
|
||||
\item Continuously monitor the behaviour of deployed models
|
||||
\item Log production predictions with the model's version and input data
|
||||
\item Store models in a single format for ease of use
|
||||
\item Equip with a web interface, package image, provide REST API
|
||||
\item Provide simple API for serving batch and real-time requests
|
||||
\item Integration with existing data infrastructure
|
||||
\item Querying, visualising and understanding metrics and event logging
|
||||
\item Allow experimentation with the inference code
|
||||
\item Keep the model and its documentation together
|
||||
\item Parallelise feature extraction
|
||||
\item Cache predictions
|
||||
\item Allow robustly composing inference functions
|
||||
\end{enumerate}
|
||||
|
||||
\chapter{TAM questionnaire} \label{appendix:questions}
|
||||
|
||||
Following the methodology for the parsimonious technology acceptance model of Wu et al. \cite{wu2011user}, each statement can be rated on a 7-point Likert scale.
|
||||
|
||||
\paragraph{Perceived usefulness (PU)}
|
||||
\begin{enumerate}
|
||||
\item I believe the use of \textit{GreatAI} improves the quality of AI deployments.
|
||||
\item I believe the use of \textit{GreatAI} would increase my productivity.
|
||||
\item I believe the use of \textit{GreatAI} can lead to robust and trustworthy deployments.
|
||||
\item Overall, I found \textit{GreatAI} useful when working with AI.
|
||||
\end{enumerate}
|
||||
|
||||
\paragraph{Perceived ease of use (PEOU)}
|
||||
\begin{enumerate}
|
||||
\item I found the \textit{GreatAI} easy to learn.
|
||||
\item I found it is easy to employ \textit{GreatAI} in practice.
|
||||
\item I found it is easy to integrate \textit{GreatAI} into an existing project.
|
||||
\item Overall, I found \textit{GreatAI} easy to use.
|
||||
\end{enumerate}
|
||||
|
||||
\paragraph{Intention to use (ITU)}
|
||||
\begin{enumerate}
|
||||
\item Assuming \textit{GreatAI} is applicable to my task, I predict that I will use it on a regular basis in the future.
|
||||
\item Overall, I intend to use the \textit{GreatAI} in my personal or professional projects.
|
||||
\end{enumerate}
|
||||
|
||||
BIN
docs/thesis/figures/annotator.png
Normal file
|
After Width: | Height: | Size: 920 KiB |
BIN
docs/thesis/figures/architecture.png
Normal file
|
After Width: | Height: | Size: 779 KiB |
BIN
docs/thesis/figures/best-practices.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
|
Before Width: | Height: | Size: 57 KiB |
BIN
docs/thesis/figures/dashboard-domains.png
Normal file
|
After Width: | Height: | Size: 270 KiB |
BIN
docs/thesis/figures/dashboard-highlights.png
Normal file
|
After Width: | Height: | Size: 795 KiB |
BIN
docs/thesis/figures/design-cycle.drawio.png
Normal file
|
After Width: | Height: | Size: 426 KiB |
BIN
docs/thesis/figures/design-cycle2.drawio.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
docs/thesis/figures/greatai-api.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
docs/thesis/figures/greatai-header.png
Normal file
|
After Width: | Height: | Size: 104 KiB |
BIN
docs/thesis/figures/greatai-parallel.png
Normal file
|
After Width: | Height: | Size: 210 KiB |
BIN
docs/thesis/figures/greatai-table.png
Normal file
|
After Width: | Height: | Size: 190 KiB |
BIN
docs/thesis/figures/highlights-histograms.png
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
docs/thesis/figures/mag-confusion.png
Normal file
|
After Width: | Height: | Size: 424 KiB |